0

我正在覆盖 java.Object.toString() 以获取 JSON,而无需在我的应用程序的服务器端使用任何 JSON 库。

jQuery 版本1.9.0和 JDK 版本1.6.21 作为回应:

var jqxhr = $.ajax(url:"/getAvailableAddress.do",
type:"GET",
data:"cat=PreOrder&task=getAvailableAddress"+$(form).serialize() )
    .done(function(response) { console.log(response); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });

我从我的服务器获取以下 JSON:

{
    "response": [
        {
            "alk": "123456",
            "qualifier": "golden",
            "buildingname": "Rose Appartments",
            "buildingnumber": "1245",
            "Street": "Nehru Street",
            "Town": "Kolkata",
            "Postcode": "MQK 456"
        },
        {
            "alk": "123457",
            "qualifier": "platinum",
            "buildingname": "Lily Appartments",
            "buildingnumber": "1585",
            "Street": "Modi Street",
            "Town": "Bangalore",
            "Postcode": "476 AKQ"
        }
    ]
}

当我尝试执行以下操作时:

var result = $.parseJSON(response);
alert(result.response[0].alk);

我在 Jquery 文件中收到一个 javascript 错误:

Uncaught SyntaxError: Unexpected token o jquery-1.9.0.min.js:1
st.extend.parseJSON jquery-1.9.0.min.js:1
(anonymous function)

但是当我使用以下内容时,我根本没有收到任何错误。

var result = eval(response);
alert(result.response[0].alk);

jQuery Parse 做错了什么?

4

3 回答 3

1

如果来自服务器的响应包含“var response =”,那么从技术上讲,这不是有效的 JSON。JSON 只是对象表示法 {} 和该对象表示法中的值。它前面不应该有 = 或 var。Eval() 不会捕捉到这一点,因为较大的语句是有效的 JavaScript(它正在创建一个名为 response 的变量)

于 2013-05-11T21:51:33.927 回答
1

dataType如果未设置该属性,jQuery 会“智能猜测”AJAX 请求的返回。它相应地解析它。

jQuery.ajax()

数据类型(默认:智能猜测(xml、json、脚本或 html))

如果您返回 JSON 以及正确的标头,您将在回调中收到的数据将根据其预期类型进行预解析。不再需要解析。

此外,检查JSON 的正确语法。您可以使用在线提供的JSON 验证器

于 2013-05-11T21:47:46.377 回答
0

Thanks @adeneo. I got my issue resolved by researching your JSON.parse().

The following code works:

var jqxhr = $.ajax(url:"/getAvailableAddress.do",
type:"GET",
data:"cat=PreOrder&task=getAvailableAddress&"+$(form).serialize() )
    .done(function(response) { 
           var result =$.parseJSON('"'+response+'"'); 
           alert(result.response[0].alk);
     })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });
于 2013-05-11T22:21:32.307 回答