我有一个表单,我需要将通过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();
}
答案 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');