Ajax拒绝在非常奇怪的情况下发送数据

时间:2011-11-25 22:36:33

标签: php javascript ajax post get

我有一个表单,我需要将通过AJAX选择的数据发送到。整个想法是,一旦选择了表单数据,通过jQuery.get()发送的ajax调用调用另一个函数,该函数接收并解码PHP中的数据,并将该数据用作id以从数据库获取更多数据。然后重新编码来自数据库的数据并将其发送到javascript函数,该函数根据传递的内容打印更多数据。

我的问题是,无论何时我在javascript函数中使用$_GET标记引用$_POST<?php ?>,我都会收到错误消息,告诉我我的javascript函数未定义。我知道这至少可以部署,因为当我删除$_GET/$_POST超全局时,会发送AJAX调用。

对此的任何帮助将不胜感激。

这是我的代码:

jQuery.noConflict();        

function printSubCategories(categories) {

    for (var i = 0; i < categories.length; i++) {

        var opt = document.createElement('option');

        opt.text = categories[i]['name'];
        opt.value = categories[i]['id'];

        jQuery('#subcategories').append(opt);
    }    
}

function recieveAndPrint() {
<?php
    $categories = getCategories(json_decode($_GET['parent']));
?>
    printSubCategories(<?=json_encode($categories)?>);
}

function ajaxCategories(pathToFile, ajaxData) {  
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(ajaxData) {
        //alert('Data loaded: ' + ajaxData + <?=json_encode($_POST)?>);
    });

    recieveAndPrint();

}

1 个答案:

答案 0 :(得分:2)

我怀疑你对AJAX的运作方式感到困惑。看起来您希望AJAX调用可以与位于同一页面上的PHP一起使用,只需加载一次页面即可。那不准确;你需要的是另一个在服务器上调用的php页面,它将数据作为JSON返回到原始页面。你的回调也遇到了问题,因为在调用receiveAndPrint()之前数据还没有准备好;它需要在回调中调用(但在那时它只会是 print ,因为接收部分已经完成了。)

假设你有两个PHP文件,a.php和b.php。第一个将用于显示初始页面,并将调用第二个页面以检索特定parent实例的新数据。

a.php只会

jQuery.noConflict();        

function printSubCategories(categories) {

    for (var i = 0; i < categories.length; i++) {

        var opt = document.createElement('option');

        opt.text = categories[i]['name'];
        opt.value = categories[i]['id'];

        jQuery('#subcategories').append(opt);
    }    
}


function ajaxCategories(pathToFile, ajaxData) {  
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(data) {
        printSubCategories(data);
    });
}

称为

ajaxCategories('/b.php','value_of_parent');

b.php

<?php
    $categories = getCategories(json_decode($_GET['parent']));
    header('Content-type: application/json');
?>
<?=json_encode($categories)?>

您可能还希望确保不缓存响应。

header('Cache-Control: no-store');