将AJAX调用发送到同一个php文件

时间:2011-11-23 04:36:46

标签: php javascript jquery ajax

我有以下功能。一个应该接收一个id,然后应该通过POST请求通过AJAX传输。

然而,虽然我知道“initiateSubCategories”函数正在工作,但无论出于何种原因,ajax函数都拒绝工作。它应该将数据发送到它所调用的同一个文件,我觉得这可能是问题所在。

我在这里做错了吗?我已经尝试通过jslint来验证我的JavaScript,但是所有给我的是关于我的代码格式的一些细微的抱怨(这不是问题,但是在我修复之后)。

这是我的代码:

function sendAjaxDataViaPost(pathToFile, ajaxData) {  
    $.post(pathToFile, function(ajaxData) {
        alert("Data loaded: " + ajaxData);
        $('#pageOne').append('<pre>' + ajaxData '</pre>');
    });
}

function initiateSubCategories(parent) {
    //$("#pageOne").append("<pre>" + parent + "</pre>");
    sendAjaxDataViaPost('form.php', parent);
    <?php
        $categories = $this->formData->getCategories($_POST['value']);
    ?>
    printSubCategories(<?=$categories;?>);
}

那么,我做错了什么?我在Firefox和Chrome中都尝试过这种方法,而且都没能生产任何东西。

更新

我将函数更改为使用以下格式:

$.post(pathToFile, { id: ajaxData }, function(ajaxData) {
    alert("Data loaded: " + ajaxData);
    $('#pageOne').append('<pre>' + ajaxData '</pre>');
});

然而,当我尝试降落$_POST['id']时,它告诉我它没有被引用。

???

更新2

我刚刚在FireBug的控制台中发现我的“initiateSubCategories”函数未定义。我想知道的是如何做到这一点......

我会发布我的整个代码 - 第二双眼睛可能真的有助于这个。

<?php 

$target = JPATH_BASE.DS."index.php?action=com_adsmanager&task=save&Itemid=".$this->itemId;
$saveTarget = JPATH_BASE.DS."index.php?action=com_adsmanager&task=Itemid=".$this->itemId;

function populateCategories($parent, FormData $formData) {
    $categories = $formData->getCategories($parent);
    foreach($categories as $section => $row){
        ?>
           <option value=<?=$row['id'];
        ?>>
        <?php 
            echo $row['name']; 
        ?>
            </option>
        <?php       
    }
}

?>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
</script>
<script type="text/javascript">

    function sendAjaxDataViaPost(pathToFile, ajaxData) {  
        $.post(pathToFile, {'id' : ajaxData}, function(ajaxData) {
            alert("Data loaded: " + ajaxData);
            $('#pageOne').append('<pre>' + ajaxData '</pre>');
        });
    }

    function initiateSubCategories(parent) {
        sendAjaxDataViaPost('form.php', parent);
        $("#pageOne").apppend('<pre>' + <?=$_POST;?> + '</pre>'));
    }

    function printSubCategories(categories) {
        for (var i = 0; i < categories.length; i++) {
            var opt = document.createElement("option");
            opt.text = categories['name'];
            opt.value = categories['id'];

            $("#subcategories").append(opt);
        }    
    } 

</script>

<div id="pageOne">
    <form action=<?=$saveTarget;?> method="post" enctype="multipart/form-data">
        <select name="category" id="categories" class="ads_categories" onclick="initiateSubCategories(this.value);">
            <option value="0">--Please choose a category--</option>
            <?php populateCategories(0, $this->formData); ?>
        </select> 
        <select name="category" id="subcategories" class="ads_subcategories">
            <option value="0">--Please choose a subcategory--</option>
        </select> 
    </form>
</div>

1 个答案:

答案 0 :(得分:1)

尝试将您的帖子更改为

$.post(pathToFile, { 'id': ajaxData }, function(ajaxData) {
    alert("Data loaded: " + ajaxData);
    $('#pageOne').append('<pre>' + ajaxData '</pre>');
});

我假设您在调用

之前通过ajaxData发送了一些值
function sendAjaxDataViaPost(pathToFile, ajaxData) {