我将一些数据从服务器发送回页面。它对我来说看起来像是有效的JSON,但它正在我的jQuery.ajax()调用中被错误处理程序捕获/处理。
这是显示的错误消息:
Error: Invalid JSON: ({"id":"#settingsResult","payload":"<form id=\"pwd_change_frm\" action=\"post\">\n <div>\n <div>\n <div><\/div>\n <div><label for=\"changepwd_password\">New Password<\/label><\/div>\n <div><input type=\"password\" name=\"changepwd[password]\" title=\"Enter new password\" style=\"width:258px;\" id=\"changepwd_password\" \/><\/div>\n <\/div>\n <div class=\"spacer\"> <\/div>\n <div>\n <div><\/div>\n <div><label for=\"changepwd_password_confirm\">Confirm New Password<\/label><\/div>\n <div><input type=\"password\" name=\"changepwd[password_confirm]\" title=\"Retype new password)\" style=\"width:258px;\" id=\"changepwd_password_confirm\" \/><\/div>\n <\/div>\n <div class=\"spacer\"><\/div>\n <div><img id=\"pwd_chg_btn\" class=\"submit_btn\" src=\"\/images\/button_submit.gif\" alt=\"Button_submit\" \/><\/div>\n <\/div>\n <input type=\"hidden\" name=\"changepwd[_csrf_token]\" value=\"1b7f3529797245c0fc43c3ddf5ade30d\" id=\"changepwd__csrf_token\" \/><\/form>\n<div class=\"spacer\"><\/div>"})
另外,FF Firebug正确解析返回的数据并正确显示 - 这就是为什么我不明白为什么jQuery似乎无法处理它。
这是进行调用的代码:
jQuery.ajax({
type: 'POST',
url: '/some_url?id='+this.id,
timeout: 2000,
success: function(result){ jQuery(result.id).html(result.payload); },
error: function (xhr, ajaxOptions, thrownError){ alert('Error: '+ thrownError); }
});
答案 0 :(得分:4)
此时可能无用回答,但我只是觉得我注意到这个问题似乎与$.parseJSON()
有关。
如果我删除所有出现的\n
,并将所有\"
替换为\'
,则会有效。
或者,如果我双重逃避它们,它就会起作用。
\\n
\\"
...这是有意义的,因为我相信jQuery只是做eval()
(或实际上是相同的事情),所以我想逃避"
正在终止字符串并转义{{1引入一个无效的换行符。
答案 1 :(得分:3)
由于周围的'()',删除它及其有效的json。
答案 2 :(得分:1)
由于其他所有内容似乎都有效,因此您可能会在数据中加入(
和)
。
答案 3 :(得分:1)
使用jquery validate(版本1.7)时也会出现错误。您可以查看:http://datatables.net/forums/comments.php?DiscussionID=3993&page=1#Item_16
我也升级到jquery 1.5.1,我遇到了同样的问题。在我更新了jquery validate之后(从这里:https://github.com/jzaefferer/jquery-validation),错误消失了。
答案 4 :(得分:0)
传递的实际JSON是什么?错误消息中的字符串:
{"id":"#settingsResult",
"payload":"\n \n \n <\/div>\n New Password<\/label><\/div>\n <\/div>\n <\/div>\n <\/div>\n \n <\/div>\n Confirm New Password<\/label><\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/form>\n<\/div>"}
根据JSONLint有效。你是否包括parens?
更改问题后更新
<\/div>
是否有可能让人感到困惑?这不是有效的HTML,因此我不知道jQuery(result.id).html(result.payload)
将使用它做什么。
答案 5 :(得分:0)
jquery要求您提供“dataType:json”,除非您在服务器端代码中提供正确的内容类型,例如“header('Content-type:application / json');”
答案 6 :(得分:-1)
根据json.org
JSON可以是数组或对象
对象是一组无序的名称/值对。一个对象开始 用{(左括号),以}结尾
数组是有序的值集合。数组以[以[开头] (左括号)并以]结尾
所以JSON应该从&#39; {&#39;或者&#39; [&#39;并且它不能以&#39;(&#39;
)开头此外,您还可以使用以下在线验证程序(如debugjson.com)来检查JSON输入的错误。