我已经在我的网站上实现了一个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"}

我估计你的aspx页面不会返回JSON对象。 您的页面应该执行如下操作(page_load)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

同时,试着改变你的AjaxFailed:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus应该告诉你你得到的错误类型。


我在使用多个空格分隔的数据类型(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
});

另一件让我搞砸的事情是使用localhost而不是127.0.0.1,反之亦然。显然,JavaScript不能处理从一个到另一个的请求。


如果实现的Web服务方法是无效的,则只需从头文件中删除dataType: 'json'。

在这种情况下,Ajax调用并不期望有JSON返回数据类型。


使用下面的代码来确保响应是JSON格式(PHP版本)…

header('Content-Type: application/json');
echo json_encode($return_vars);
exit;

我也有同样的问题。我的问题是我的控制器返回的是状态码而不是JSON。确保你的控制器返回如下内容:

public JsonResult ActionName(){
   // Your code
   return Json(new { });
}

这只是为了记录,因为我在寻找类似于OP的问题的解决方案时偶然看到了这篇文章。

在我的情况下,我的jQuery Ajax请求被阻止成功,由于同源策略在Chrome。当我修改我的服务器(Node.js)时,所有问题都解决了:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

这花了我一个小时的时间埋头苦干。我觉得自己很蠢……


我也有同样的问题。这是因为我的JSON响应包含一些特殊字符,并且服务器文件不是用UTF-8编码的,所以Ajax调用认为这不是一个有效的JSON响应。


我在更新jQuery库时遇到过这个问题。如果服务方法没有返回任何东西,则意味着返回类型为空。

然后在Ajax调用中,请提到dataType='text'。

这将解决问题。


你只需要在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
});

您的脚本要求以JSON数据类型返回。

试试这个:

private string test() {
  JavaScriptSerializer js = new JavaScriptSerializer();
 return js.Serialize("hello world");
}

看到这个。这也是一个类似的问题。我努力工作。

不要删除dataType: 'JSON',

注意:您的响应数据应该是json格式


如果你总是从服务器返回JSON(没有空响应),dataType: ' JSON '应该工作,contentType是不需要的。但是,请确保JSON输出…

有效的(JSONLint) 串行化(JSONMinify)

jQuery AJAX将在有效但未序列化的JSON上抛出“parseerror”!