向同一个php文件发送AJAX调用


Sending AJAX call to the same php file

我有以下函数。一个应该接收一个id,然后应该通过AJAX以POST请求的方式传输id。

然而,虽然我知道"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>

尝试将post call更改为

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

我假设你在调用

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