Javascript Ajax请求返回200 OK,但会触发错误事件而不是成功

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(); } 专用无效测试(){ 响应。写入(“警报(‘记录已删除’);”; } 成功删除后,我需要(“记录已删除”)字符串。我可以删除内容,但我没有收到此消息。这是正确的还是我做错了什么?解决此问题

我已经在我的网站上实现了一个Ajax请求,我正在从一个网页调用端点。它总是返回200 OK,但是jQuery执行错误事件。
我尝试了很多方法,但都没能解决问题。我在下面添加我的代码:

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); }
    });
}