我正在将一些数据从服务器发送回页面。对我来说,它看起来像是有效的 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); }
});
最佳答案
此时回答可能没用,但我只是想我会注意到这个问题似乎与 $.parseJSON()
有关。
如果我删除所有出现的 \n
,并将所有出现的 \"
替换为 \'
,它就会起作用。
或者,如果我双重转义它们,它就会起作用。
\\n
\\"
...这是有道理的,因为我相信 jQuery 只是做了一个 eval()
(或者实际上是相同的事情),所以我猜转义 "
正在终止字符串并转义 \n
会引入一个无效的换行符。
关于jquery - 为什么这个 JSON 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052010/