我正在将一些数据从服务器发送回页面。对我来说,它看起来像是有效的 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>"})
Run Code Online (Sandbox Code Playgroud)
顺便说一句,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); }
});
Run Code Online (Sandbox Code Playgroud)
此时回答可能毫无用处,但我只是想我会注意到这个问题似乎与$.parseJSON().
如果我删除所有出现的\n,并将所有出现的 替换\"为\',则它可以工作。
或者,如果我双重转义它们,它就会起作用。
\\n
\\"
Run Code Online (Sandbox Code Playgroud)
...这是有道理的,因为我相信 jQuery 只是做了一个eval()(或者实际上是相同的事情),所以我猜转义是"终止字符串,而转义是\n引入一个换行符,它将是无效的。