【问题标题】:Handling responses from server side in jQuery ajax calls在 jQuery ajax 调用中处理来自服务器端的响应
【发布时间】: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,这解决了我的 [] 问题。
  • -- 第二次更新 -- 请忽略这个问题,这就是整个问题,我需要做的就是设置正确的数据类型。

标签: jquery arrays json object


【解决方案1】:

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

dataType: 'json'

【讨论】:

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

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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多