【问题标题】:XMLHttpRequest with status 0状态为 0 的 XMLHttpRequest
【发布时间】:2014-03-20 21:49:30
【问题描述】:

我正在尝试使用 XMLHttpRequest,但是当我调用 xmlhttp.send(post) 时,我收到状态为 1 和状态为 0 的 xmlhttp。我认为状态等于 1 是可以的,因为意味着服务器连接已建立,但为什么状态0?可惜对方没有收到我的请求。

function ajaxRequest(method, url, post, callback_fn){
    var xmlhttp;
    if (window.XMLHttpRequest) { //code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { //code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open(method,url,true);
    if (method=="POST"){
        xmlhttp.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
        xmlhttp.setRequestHeader("Content-Length", post.length);
    }
    xmlhttp.send(post);
    console.log("xmlhttp.readyState = " + xmlhttp.readyState); // = 1
    console.log("xmlhttp.status = " + xmlhttp.status); // = 0
}

有人可以帮我吗?

【问题讨论】:

  • 你必须真正等到readyState为4,然后检查状态。看看网上的例子。
  • 好的,我删除了我原来的问题,你怎么称呼这个方法?按钮点击,表单提交?
  • 我用按钮点击(onclick)调用这个方法。

标签: javascript xmlhttprequest ajax-request


【解决方案1】:

onreadystatechange 事件在状态改变时触发,只有当有返回响应时才能检查请求的 statusCode 是什么(200、404 等)

function ajaxRequest(method, url, post, callback_fn){
    var xmlhttp;
    if (window.XMLHttpRequest) { //code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { //code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            console.log("xmlhttp.status = " + xmlhttp.status);
        }
    }

    xmlhttp.open(method,url,true);
    if (method=="POST"){
        xmlhttp.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
        xmlhttp.setRequestHeader("Content-Length", post.length);
    }
    xmlhttp.send(post);
}

【讨论】:

  • 感谢您的回答。我已经尝试过了,但我的应用程序从不调用 onreadystatechange 函数。可能是什么问题?
  • 这不是你的应用程序调用的东西,所有 XMLHttpRequests 都会在执行 ajax 请求时多次触发 onreadystatechange 事件 -> jsfiddle.net/776Wg
  • 是的,我知道。我会更好地表达自己。我的 XMLHttpRequest 永远不会触发 onreadystatechange,也不会显示任何 javascript 异常或错误日志。
  • 这表明ajaxRequest 函数永远不会被调用。
  • 不,我这么说。我可以确认这一点,因为我看到了`console.log("xmlhttp.readyState = " + xmlhttp.readyState); // = 1 console.log("xmlhttp.status = " + xmlhttp.status); // = 0`,调用到 ajaxRequest 函数中。
【解决方案2】:

取消点击,看看它是否停止状态为零。

onclick="ajaxRequest(...); return false;"

问题是页面正在刷新并终止 Ajax 请求。

【讨论】:

  • 好吧@epascarello,当我在 onclick 中输入 return false 时,onreadystatechange 函数被触发。为什么我需要这样做?方法对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多