2013-05-11 39 views
0

我重写了java.Object.toString()来获取JSON,而不在应用程序的服务器端使用任何JSON库。使用jQuery 1.9解析JSON时出错但在eval中没有错误

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解析?

+0

过得好的JSON? – Joseph 2013-05-11 21:45:50

+1

您是否尝试过'var result = JSON.parse(response);',如果您的浏览器支持它,jQuery应该在内部使用什么? – adeneo 2013-05-11 21:45:56

+0

@JosephtheDreamer - 我正在使用$ .ajax()并将JSON记录到控制台。 – Srihari 2013-05-11 21:48:53

回答

1

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

jQuery.ajax()

的数据类型(默认:智能猜测(XML,JSON,脚本或HTML))

如果返回的JSON,以及适当的标题,您将在回调中收到的数据将根据其预期类型进行预解析。无需再解析。

另外,检查proper syntax of JSON。您可以使用在线提供的JSON validators

1

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

0

谢谢@adeneo。我通过研究你的JSON.parse()解决了我的问题。

下面的代码工作:

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