【发布时间】: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 您误解了:您期望异步代码同步运行。每个初级开发人员都会遇到这个问题。在这种情况下,如何对源代码中的语句进行排序并不重要。将警报放在您的
onerror和onload函数中。
标签: javascript cors