jQuery不会正确处理application / json响应

时间:2012-08-12 18:01:17

标签: jquery

使用jQuery 1.8和Kohana进行简单的jQuery ajax调用和响应:

$.ajax({
    data:{
        file: file  
},
    dataType: 'json',
    url: 'media/delete',
    contentType: 'application/json; charset=utf-8',
    type: 'GET',
    complete: function(response){
        console.log(response);
        console.log(response.file);
    }
});

URL的PHP​​是一个简单的json_encode()页面,它返回:

{"file":"uploaded\/img\/Screen Shot 2012-04-21 at 2.17.06 PM-610.png"}

根据JSLint,这是有效的JSON。

根据firebug的说法,响应头是

Response Headers
Connection  Keep-Alive
Content-Length  74
Content-Type    application/json
Date    Sun, 12 Aug 2012 17:44:39 GMT
Keep-Alive  timeout=5, max=97
Server  Apache/2.4.1 (Unix) PHP/5.4.0
X-Powered-By    PHP/5.4.0

但是在成功函数中“响应”不是我期望的JS对象,我无法访问response.file。相反,它似乎是某种响应对象,其中包含readyState,responseText,status等字段。

这里有许多类似的问题,但我相信我根据其他答案正确连接了一切。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

complete:回调不提供响应,因为它的参数。来自jQuery doc for $.ajax()

complete(jqXHR, textStatus)

因此,您所看到的完整函数的参数是jqXHR对象,而不是解析后的响应。这很可能是因为完成ajax调用后调用complete是否成功。获取成功解析的JSON响应的是success处理程序。

您可能希望改为使用success:回调。

$.ajax({
    data: {file: file},
    dataType: 'json',
    url: 'media/delete',
    contentType: 'application/json; charset=utf-8',
    type: 'GET',
    success: function(response){
        console.log(response);
        console.log(response.file);
    }
});