【发布时间】:2019-12-29 06:27:39
【问题描述】:
我有一个 PHP 网络项目,它访问一个使用 Restlet 框架的 Java 项目。 Web 项目在 Apache 上运行,我正在使用 localhost 对其进行测试。 Restlet 框架也使用 localhost 作为域,但 url 略有不同:localhost:8888/
这是使用 Ajax 使用上述 URL 调用 Java 类 (CollectionPublic) 之一的 Javascript。
var url = "<?php echo $config['restServer_url'] ?>collectionPublic";
var params= "pageList="+facebookPages+"&time="+time;
var client = new XMLHttpRequest();
client.open("POST", url,true);
client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
client.onreadystatechange = function () {
if (client.readyState != 4) return;
if (client.status != 200 && client.status != 304) {
alert("error "+client.status);
} else {
alert("success");
}
callback(client);
}
if (client.readyState == 4) return;
client.send(params);
我已经测试并且调用正确,使用 URL localhost:8888/collectionPublic,它到达 CollectionPublic 类(该类工作正常)。
问题是:当进行此调用时,CollectionPublic 类需要很长时间才能完成其任务,并且用户应该能够访问其他页面(在同一服务器上)或重新加载页面。然而,当这两种情况发生时,alert("error "+client.status) 会弹出,client.status 的值为 0。然后调用被中止,但 CollectionPublic 的任务正常继续,当它完成时,网页中没有任何反应(之前,警报(“成功”)被触发)。
我花了几个小时试图找出导致错误的原因,因为这是上周的工作。我发现的大多数帖子都说这可能是跨域资源问题,因为 localhost 和 localhost:8888 不被视为同一个域。为了查看这是否真的是问题所在,我使用 --disable-web-security 参数启动了 Chrome(它确实被禁用了),但问题仍然存在。 最奇怪的是它以前也可以用,而我在代码中完全没有改变。
我看过这个帖子Reloading page while an Ajax request in progress gives empty response and status as zero,看起来和我所面对的很相似。
希望我已经说清楚了,但是如果您对此问题有任何疑问,请尽管问。
非常感谢。
【问题讨论】:
标签: javascript php ajax xmlhttprequest