我已经在我的网站上实现了 Ajax 请求,并且正在从网页调用端点。它总是返回200 OK ,但是 jQuery 执行 error 事件。我尝试了很多事情,但无法弄清问题所在。我在下面添加我的代码:
var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
alert("hello");
alert(result.d);
}
function AjaxFailed(result) {
alert("hello1");
alert(result.status + ' ' + result.statusText);
}
JqueryOpeartion.aspx
C#代码protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
成功删除后,我需要("Record deleted")
字符串。我可以删除内容,但是没有收到此消息。这是正确的还是我做错了什么?解决此问题的正确方法是什么?
jQuery.ajax
尝试根据指定的dataType
参数或服务器发送的Content-Type
标头转换响应主体。如果转换失败(例如,如果 JSON / XML 无效),则会触发错误回调。
您的 AJAX 代码包含:
dataType: "json"
在这种情况下,jQuery:
将响应评估为 JSON 并返回一个 JavaScript 对象。 […] 严格解析 JSON 数据;任何格式错误的 JSON 都会被拒绝,并引发解析错误。 […] 空响应也被拒绝;服务器应返回 null 或 {} 的响应。
您的服务器端代码返回状态为200 OK
HTML 代码段。 jQuery 期望使用有效的 JSON,因此触发了抱怨parseerror
的错误回调。
解决方案是从 jQuery 代码中删除dataType
参数,并使服务器端代码返回:
Content-Type: application/javascript
alert("Record Deleted");
但我宁愿建议返回 JSON 响应并在成功回调中显示消息:
Content-Type: application/json
{"message": "Record deleted"}
我通过使用多个以空格分隔的dataType
( jQuery 1.5+ )感到很幸运。如:
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'text json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
您只需在 AJAX 调用中删除dataType:“json”
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: json,
dataType: 'json', //**** REMOVE THIS LINE ****//
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});