在 jQuery ajax 调用中处理来自服务器端的响应

Posted

技术标签:

【中文标题】在 jQuery ajax 调用中处理来自服务器端的响应【英文标题】:Handling responses from server side in jQuery ajax calls 【发布时间】:2012-03-24 09:54:49 【问题描述】:

我的代码有一个缺陷,我有点困惑。

    $.ajax(
        type: 'POST',
        url: '/contact/index/add/',
        data: $("#addContact").serialize(),
        success: function(data, status, xhttp) 
            var response = eval ("[" + data + "]");
            console.log(response.msg);
            if ( response.success )
                console.log( response.msg );
             else 
                console.log( response.msg );
            
        ,
        dataType: "html"
    );

我正在寻找的是能够访问数组(以 JSON 格式编码)的响应,但是我在 console.log(response.msg) 行上得到“未定义”

如果我 console.log(response) 它显示(在萤火虫中)为:

[对象 成功=true, msg="test"]

请求正在发回以下字符串:

"成功":true,"msg":"测试" 这就是为什么我必须将响应包含在 [ ] 中以进行评估。

所以我很困惑的是:如何访问所述数组的属性。

我有的服务器端(php/zend框架)

echo Zend_Json_Encoder::encode(array('success'=>true,'msg'=>'test'));退出;

我需要做什么才能访问数组的键/值,如行中所示

if( response.success )  // do something 

我需要修改服务器端还是javascript端?

【问题讨论】:

-- 更新 -- 对于初学者,我将 dataType 更正为 json,而不是 HTML,这解决了我的 [] 问题。 -- 第二次更新 -- 请忽略这个问题,这就是整个问题,我需要做的就是设置正确的数据类型。 【参考方案1】:

您需要指定正确的dataType。您应该指定 JSON 作为返回的数据类型:

dataType: 'json'

【讨论】:

是的,我希望有办法删除问题哈哈,我意识到我的错误。谢谢。【参考方案2】:
dataType: "json"

并且不要使用 eval 来解析 json。使用 jQuery.parseJSON

【讨论】:

很高兴知道,谢谢...仍在学习 :) 有点担心 eval 语句。【参考方案3】:

尝试把方括号换成普通的就是eval语句"(" +...

【讨论】:

以上是关于在 jQuery ajax 调用中处理来自服务器端的响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在服务器端取消 ajax 查询(来自 jquery)?

使用来自 JavaScript 的每个请求向服务器端发送信息

实现启用 AJAX 的 WCF 服务 - 来自 JQuery 的调用没有响应

使用 Jquery $.ajax 在 Flask 上调用服务器端函数 [重复]

如何在没有 Ajax 的 JQuery DataTables 中使用服务器端处理

用React处理ajax