javascript - jquery的ajax方法 - js中ajax




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

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

C#代码为JqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

成功删除后,我需要("Record deleted")字符串。 我可以删除内容,但我没有收到此消息。 这是正确的还是我做错了什么? 解决这个问题的正确方法是什么?


使用以下代码确保响应采用JSON格式(PHP版本)...

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

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


尝试下面

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

要么

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

在JSON对象中使用双引号而不是单引号。 我认为这将解决问题。


您只需在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");
}

我使用多个空格分隔的dataTypejQuery 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
});

我认为你的aspx页面不会返回一个JSON对象。 你的页面应该做这样的事情(page_load)

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

Response.Write(OutPut);

另外,请尝试并更改您的AjaxFailed:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

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


我遇到了一个更新的jQuery库的问题。 如果服务方法没有返回任何东西,这意味着返回类型是void

然后在你的Ajax调用中,请提及dataType='text'

它将解决问题。


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

不要删除dataType: 'JSON',


这只是为了记录,因为当我寻找解决我的问题的方法与OP相似时,我遇到了这个问题。

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

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

从字面上来说,我花了一个小时把我的头撞在墙上。 我感觉很愚蠢......







json