【问题标题】:Javascript CORS RequestJavascript CORS 请求
【发布时间】:2016-11-11 03:24:38
【问题描述】:

我有一个启用了 CORS 的 php Web 服务。

我使用http://www.test-cors.org/ 确认网络服务正常工作。根据此服务,XHR 加载事件已触发,状态码为 200。

我将 Test Cors 生成的代码复制到在线 javascript 控制台 https://repl.it/languages/javascript

在这里我总是收到 0 表示 XHR 状态。

基于测试 Cors,我的 Web 服务设置为允许跨源。但是,当我使用在线 javascript 控制台时,相同的 Web 服务会返回状态代码 0。

这段代码不起作用有什么原因吗?

var createCORSRequest = function(method, url) {
    var xhr = new XMLHttpRequest();

    if ("withCredentials" in xhr) {
     //This part is called correctly
     xhr.open(method, url, true);
    } 

    return xhr;
};

var url = <URL>
var method = 'GET';
var xhr = createCORSRequest(method, url);

xhr.loadstart = function() {
    //Not called
}
xhr.onload = function() {
    //Not called
};

xhr.onerror = function() {
    // Called
};

xhr.send();

alert(xhr.status)

【问题讨论】:

  • 因为您在发出实际请求之前就发出警报?也很好奇什么是“在线 javascript 编译器”。
  • Plus - 我只在调用 open 之前附加了回调。 xhr = 新的 XMLHttpRequest。 xhr.loadstart = function() .... xhr.open(method)...xhr.send().
  • @JaredSmith 我的意思是说控制台而不是编译器。使用上面的代码,调用了 xhr.onerror。即使我在通话后移动了 xhr.status 的警报,警报仍然是 0
  • @HShhanick 您误解了:您期望异步代码同步运行。每个初级开发人员都会遇到这个问题。在这种情况下,如何对源代码中的语句进行排序并不重要。将警报放在您的 onerroronload 函数中。

标签: javascript cors


【解决方案1】:

您的状态警报是在您发送(从而接收)请求之前发出的,因此尚未设置状态并且您得到 0。 您的所有警报/检查都需要在 onload/onerror 中,在请求完成时执行。

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 2014-03-02
    • 2018-06-07
    • 2013-08-29
    • 2016-11-01
    • 2020-09-08
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多