我无法从我的php jquery/json/ajax获得响应。我一直将所有这些不同的教程组合在一起,但我似乎仍然无法将它们放在一起,因为没有一个教程遵循我想要做的事情。
现在我正在尝试将两个数组(因为没有简单的方法可以将关联数组传递给我的jquery ajax函数并发出警报。这是我的代码:
.PHP
$names = array('john doe', 'jane doe');
$ids = array('123', '223');
$data['names'] = $names;
$data['ids'] = $ids;
echo json_encode($data);
Jquery
function getList(){
$.ajax({
type: "GET",
url: 'test.php',
data: "",
complete: function(data){
var test = jQuery.parseJSON(data);
alert(test.names[0]);
alert("here");
}
},
"json");
}
getList();
在我的 html 文件中,我真正调用的只是用于调试目的的 javascript 文件。我知道我正在返回一个对象,但我的名字部分出现空值错误,我不确定为什么。我错过了什么?
我的 PHP 文件返回
{"names":["john doe","jane doe"],"ids":["123","223"]}
似乎就到此为止了 Uncaught TypeError: Cannot read property '0' of undefined
所以我的sub0正在杀死我。
使用 jQuery 提供的 $.getJSON
门面,这将为标准 JSON 请求设置所有必需的 ajax 参数:
$.getJSON('test.php', function(response) {
alert(response.names[0]); // john doe
});
但是,我认为问题的途径是 1) 您的服务器可能没有返回正确的响应代码和/或正确的标头(即:JSON 数据) - 但是上述方法至少对于后者应该强制得出这个结论。
请参阅:http://api.jquery.com/jQuery.getJSON
看起来问题是你使用的是完整的回调而不是成功回调:
function getList(){
$.ajax({
type: "GET",
url: 'test.php',
data: "",
success: function(data) { /* success callback */
var test = jQuery.parseJSON(data);
alert(test.names[0]);
alert("here");
}
},
"json");
}
getList();
来自jQuery AJAX Docs:
success(data, textStatus, jqXHR)
请求成功时要调用的函数。该函数传递三个参数:从服务器返回的数据,根据 dataType 参数进行格式化;描述状态的字符串;和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。从jQuery 1.5开始,成功设置可以接受一系列函数。将依次调用每个函数。这是一个阿贾克斯事件。
complete(jqXHR, textStatus)
请求完成时(执行成功和错误回调后)要调用的函数。该函数传递两个参数:jqXHR(在jQuery 1.4.x中,XMLHTTPRequest)对象和一个对请求状态进行分类的字符串("成功","未修改","错误","超时","中止"或"解析器错误")。从jQuery 1.5开始,完整的设置可以接受一系列函数。将依次调用每个函数。这是一个阿贾克斯事件。
jQuery想知道什么样的数据作为响应,否则它就不知道如何解析它。
所以,正如之前所说,你使用 dataType = 'json'
属性告诉 jQuery。
function getList() {
$.ajax({
type: "GET",
url: 'test.php',
data: "",
dataType: "json",
success: function(data) {
console.log(data);
}
});
}
最重要的是,让 PHP 将其内容呈现为 json 而不是 html 是个好主意。您可以通过在 PHP 脚本中的任何输出之前设置 header('Content-type: application/json');
来使用此标头。所以:
$names = array('john doe', 'jane doe');
$ids = array('123', '223');
$data['names'] = $names;
$data['ids'] = $ids;
header('Content-type: application/json');
echo json_encode($data);
你应该在单个对象中传递 ajax() 函数的所有参数。因此,应该有"数据类型"选项。此外,如果您显式设置数据类型,jQuery 将为您解析 JSON 数据。完整的回调将接收解析的 JavaScript 对象作为参数。
function getList() {
$.ajax({
type: "GET",
url: 'test.php',
data: "",
dataType: "json",
success: function(test) {
alert(test.names[0]);
alert("here");
}
});
}