从Jquery JSON获得响应

时间:2012-04-08 07:37:57

标签: php javascript jquery html json

我无法从我的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正在杀了我。

4 个答案:

答案 0 :(得分:5)

您可以使用jQuery提供的$.getJSON外观,这将为标准JSON请求设置所有必需的ajax参数:

$.getJSON('test.php', function(response) {
    alert(response.names[0]);   // john doe
}); 

但是我认为问题的路线是1)你的服务器可能没有返回正确的响应代码和/或正确的标题(即:JSON数据) - 但是至少后者的上述方法应该强制这个结论

请参阅:http://api.jquery.com/jQuery.getJSON

答案 1 :(得分:3)

看起来问题是你正在使用完整的回调而不是成功的回调:

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文档:

  

成功(data,textStatus,jqXHR)

     

请求成功时要调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest)对象。从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。

     

完成(jqXHR,textStatus)

     

请求完成时要调用的函数(执行成功和错误回调之后)。该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个对请求状态进行分类的字符串(“成功”,“未修改”,“错误”,“超时”,“中止”或“parsererror”)。从jQuery 1.5开始,完整的设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。

答案 2 :(得分:2)

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);

答案 3 :(得分:1)

您应该在单个对象中传递ajax()函数的所有参数。所以,应该有“dataType”选项。此外,如果您显式设置数据类型,jQuery将为您解析JSON数据。完整回调将接收已解析的JavaScript对象作为参数。

function getList() {
    $.ajax({  
        type: "GET", 
        url: 'test.php', 
        data: "",  
        dataType: "json",
        success: function(test) { 
            alert(test.names[0]);
            alert("here");
        }
    });
}