Javascript Ajax请求返回200 OK,但会触发错误事件而不是成功
我已经在我的网站上实现了一个Ajax请求,我正在从一个网页调用端点。它总是返回200 OK,但是jQuery执行错误事件。Javascript Ajax请求返回200 OK,但会触发错误事件而不是成功,javascript,jquery,asp.net,ajax,json,Javascript,Jquery,Asp.net,Ajax,Json,我已经在我的网站上实现了一个Ajax请求,我正在从一个网页调用端点。它总是返回200 OK,但是jQuery执行错误事件。 我尝试了很多方法,但都没能解决问题。我在下面添加我的代码: jQuery代码 C#代码为jquery皮尔逊.aspx 受保护的无效页面加载(对象发送方,事件参数e){ test(); } 专用无效测试(){ 响应。写入(“警报(‘记录已删除’);”; } 成功删除后,我需要(“记录已删除”)字符串。我可以删除内容,但我没有收到此消息。这是正确的还是我做错了什么?解决此问题
我尝试了很多方法,但都没能解决问题。我在下面添加我的代码: jQuery代码 C#代码为
jquery皮尔逊.aspx
受保护的无效页面加载(对象发送方,事件参数e){
test();
}
专用无效测试(){
响应。写入(“警报(‘记录已删除’);”;
}
成功删除后,我需要(“记录已删除”)
字符串。我可以删除内容,但我没有收到此消息。这是正确的还是我做错了什么?解决此问题的正确方法是什么?根据指定的数据类型
参数或服务器发送的内容类型
标头,尝试转换响应正文。如果转换失败(例如,如果JSON/XML无效),将触发错误回调
您的AJAX代码包含:
dataType: "json"
在本例中,jQuery:
将响应计算为JSON并返回一个JavaScript对象。[…]
JSON数据被严格解析;任何格式错误的JSON都是
拒绝,并引发分析错误。[…]一个空的响应也是无效的
拒绝;服务器应该返回null或{}响应
服务器端代码返回状态为200ok
的HTML代码段。jQuery需要有效的JSON,因此引发错误回调,抱怨parseerror
解决方案是从jQuery代码中删除数据类型
参数,并使服务器端代码返回:
Content-Type: application/javascript
alert("Record Deleted");
但我建议返回JSON响应,并在成功回调中显示消息:
Content-Type: application/json
{"message": "Record deleted"}
我认为您的aspx页面不会返回JSON对象。 您的页面应该执行以下操作(页面加载)
textStatus
应提供您所遇到的错误类型。尝试以下操作
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow',
contentType: 'application/json; charset=utf-8',
data: { "Operation" : "DeleteRow",
"TwitterId" : 1 },
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
或
在JSON对象中使用双引号而不是单引号。我认为这将解决这个问题。我很幸运地使用了多个空格分隔的
数据类型(
s()。例如:
另一件让我搞砸的事情是使用
localhost
而不是127.0.0.1,反之亦然。显然,JavaScript无法处理从一个到另一个的请求。如果实现的Web服务方法无效,您只需从标头中删除数据类型:“json”
在这种情况下,Ajax调用不需要JSON返回数据类型。使用以下代码确保响应为JSON格式(PHP版本)
我也有同样的问题。我的问题是我的控制器返回的是状态码而不是JSON。确保控制器返回如下内容:
public JsonResult ActionName(){
// Your code
return Json(new { });
}
这只是记录在案,因为我在寻找类似于OP的问题解决方案时偶然发现了这篇文章 在我的例子中,我的jQueryAjax请求由于Chrome中的错误而无法成功。当我将服务器(Node.js)修改为:
我花了一个小时的时间把头撞在墙上。我觉得自己很愚蠢…我也有同样的问题。这是因为我的JSON响应包含一些特殊字符,并且服务器文件没有使用UTF-8编码,所以Ajax调用认为这不是一个有效的JSON响应。我在更新jQuery库时遇到了这个问题。如果服务方法未返回任何内容,则表示返回类型为
void
然后在Ajax调用中,请提及dataType='text'
它将解决问题。您只需删除AJAX调用中的数据类型:“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
});
脚本要求返回JSON数据类型 试试这个:
private string test() {
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize("hello world");
}
。这也是一个类似的问题。我试过了
不要删除数据类型:'JSON',
注意:您的响应数据应该是json格式的我有类似的问题,但当我尝试删除数据类型时:'json' 我仍然有这个问题。 我的错误正在执行,而不是成功
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}
如果总是从服务器返回JSON(没有空响应),
dataType:'JSON'
应该可以工作,而contentType
则不需要。但是,请确保JSON输出
- 是有效的()
- 已序列化()
jQueryAjax将在有效但未序列化的JSON上抛出“parseerror” 可以通过JSON验证器运行JqueryOperation.aspx的输出,并查看它是否有效。您还必须检查发送的参数。目前尚未设置任何参数名称。如果参数为
TwitterId
,则必须将对象传递给data
,而不是字符串:data:{TwitterId:row}
。Jqueryoperation.aspx页面是否返回(有效)JSON?可能是服务器端代码引发了异常。。您在catch块中返回的响应是什么?@Raghav,如果服务器在处理请求时抛出异常,那么HTTP返回代码将是500。感谢您的响应。您能告诉我一件事,我如何从代码后面返回json值。我将Asp.net与C#一起使用。这解决了我的问题,但也可以让我知道这件事。@Pankaj:如果你把它作为另一个问题发布会更好。但简短的回答是:有两种方法可以做到这一点(i)代替$。ajax
您可以尝试$。getScript
。在服务器端C#脚本中,只需放入alert('recorddeleted')
(无
标记)并将C脚本的ContentType设置为text/javascript
<代码>$。ajax可能也可以工作,但我想不起是如何工作的,可能您只需要更改数据类型:“script”,
。你可能不再需要成功处理程序了
$.ajax({
type: 'POST',
url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
cache: false,
success: AjaxSucceeded,
error: AjaxFailed
});
$.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
});
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
public JsonResult ActionName(){
// Your code
return Json(new { });
}
response.writeHead(200,
{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "http://localhost:8080"
});
$.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
});
private string test() {
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize("hello world");
}
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}