jQuery AJAX HTTP状态码

6

我目前正在将我的脚本改为jquery。这是我的旧javascript:

var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : false);
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);

function updatePage() {
        if (request.readyState == 4) {
                if (request.status == 200) {
                    var response = request.responseText;
                    doSomething();
                } else if (request.status == 304) {
                    doSomethingElse();
                } else {
                }
        }
}

我现在想将它改为jquery-ajax:

request = $.ajax({
    type: "GET",
    url: url,
    data: data,
    success: updatePage
});

我该如何测试请求返回的状态码(以及responseText),就像我在旧脚本中所做的那样?

2个回答

21

试试这个:

request = $.ajax({
    type: "GET",
    url: url,
    data: data,
    statusCode: {
      200: function() {
        doSomething();
       },
      304:function(){
        doSomethingElse();
       }
     }
});

或:

request = $.ajax({
    type: "GET",
    url: url,
    data: data,
    complete: function(e, xhr, settings){
       if(e.status === 200){

       }else if(e.status === 304){

       }else{

       }
    }
});

请看我上面的编辑,我真的需要状态码。如果之前没有正确指出,对不起。 - Zulakis
@Zulakis 200: function(dataText) { 或者 complete:...text = e.responseText - mgraph
1
嗯,我尝试过 statusCode: { 200: function() { alert('状态码为200'); }, 304: function(){ alert('状态码为304'); } },但它总是弹出 '状态码为200' 的警报,即使我在 firebug 中清楚地看到状态码是 304。 - Zulakis
@mgraph 谢谢你的回答。你使用了三个等号 (e.status === 200)。这是有意为之吗? - Martin Meeser
@MartinMeeserG.i.N. 不是必须的,但最好确保它具有相同的类型(int)和值(200)。 - mgraph
显示剩余2条评论

1

您只需要将此请求绑定到一个事件,例如按钮单击或其他类似的事件

$('#btn').click({function(){
$.ajax({
    type: "GET",
    url: url,
    data: data,
    success: updatePage
});
});

你不需要将这个请求存储在一个变量中,因为 jQuery ajax 有一个 success callback,可以帮助你执行请求成功后的代码


@Zulakis 它还有一个 before 处理程序,可以在执行之前处理您的代码,并且成功回调将在执行后处理。您还需要其他状态吗? - techie_28
是的,我需要其他状态,正如您在我的问题中所看到的。 - Zulakis
我给这个帖子点了踩,因为我在我的问题中明确要求了状态码... 随意回答我的问题,我会给你点赞。 - Zulakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接