我已经在我的网站上实现了一个Ajax请求,我正在从一个网页调用端点。它总是返回200个OK,但jQuery会执行错误事件。
我尝试了很多方法,但还是没能解决这个问题。我添加我的代码如下:
jQuery代码
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);
}
jquery .aspx的c#代码
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
我需要(“记录删除”)成功删除后的字符串。我可以删除内容,但我没有收到这条消息。这是正确的还是我做错了什么?解决这个问题的正确方法是什么?
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"}
我在使用多个空格分隔的数据类型(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
});
这只是为了记录,因为我在寻找类似于OP的问题的解决方案时偶然看到了这篇文章。
在我的情况下,我的jQuery Ajax请求被阻止成功,由于同源策略在Chrome。当我修改我的服务器(Node.js)时,所有问题都解决了:
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
这花了我一个小时的时间埋头苦干。我觉得自己很蠢……
你只需要在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
});