CORS阻止我的AJAX调用吗?

时间:2014-08-07 13:17:36

标签: javascript php ajax

我将网络应用移植到Android(已创建AppInventor AI2)以在WebViewer组件中运行。

我已经完成了大部分工作,但是我的web服务器上的API脚本的AJAX调用返回null。

我的猜测是服务器返回null,因为请求的来源是来自本地计算机(在开发期间)或移动设备上的独立网页的AJAX调用,而不是来自同一域上托管的页面

一些谷歌搜索引起了很多关于CORS的提及......

这是导致我问题的原因吗?

如果我直接从浏览器调用api URL(我的服务器上的PHP脚本返回XML),我会返回正确的数据。

我也有相同的代码作为Web应用程序的一部分运行,并且工作正常。

问题似乎只是在我从机器上的本地目录调用HTML和JavaScript文件时。 (所有其他JavaScript函数都正常工作,它只是那些使用AJAX调用从Web服务器获得空响应而导致我出现问题的人。

我已经尝试将JS文件上传到我的网络服务器并从html中调用它但是它也没有工作(这是一个很长的镜头,因为我猜AJAX调用实际上仍然来自本地html文件基本上)。

这是一个完整的设置,可用于测试......

包含JavaScript的HTML文件:

<html>
<head>
<title>Test BBP App AJAX Error</title>

<script>
function getDataViaAJAX(url, callback) {

    var request = window.ActiveXObject ?
        new ActiveXObject('Microsoft.XMLHTTP') :
        new XMLHttpRequest;

    request.onreadystatechange = function () {
        if (request.readyState == 4) {
            alert("ready state of ajax changed to 4");
            alert("request/data responseText=" + request.responseText);
            alert("request=" + request);
//          request.onreadystatechange = doNothing;
            callback(request, request.status);
        }
    };
    request.open('GET', url, true);
    request.send(null);
}

function doTheLocalTest() {
    getDataViaAJAX("./sample.xml", function (data) {
        var xml = data.responseXML;
        alert("Response is: '"+xml+"'")
    });
}
function doTheWebTest() {
    getDataViaAJAX("http://www.bluebadgeparking.com/sample.xml", function (data) {
        var xml = data.responseXML;
        alert("Response is: '"+xml+"'")
    });
}
</script>
</head>
<body>
<input type="button" value="Click To Get XML from a local file" onClick="doTheLocalTest();">
<br />
<input type="button" value="Click To Get XML from the web" onClick="doTheWebTest();">
</body>
</html>

示例XML内容(sample.xml):

<markers>
<marker id="1" descr="Whitefriars Street: One way street. Space on left." lat="51.5140241200000" lng="-0.1074814800000"/>
<marker id="1898" descr="Southern General Hospital, Surgical / Orthopaedic 1 Bay" lat="55.8635700800000" lng="-4.3390578030000"/>
</markers>

将它们保存到本地目录并尝试。

从本地文件中读取XML时,从我的Web服务器加载文件时,它会失败并返回空响应。

(顺便说一下,我假设如果我开发的FireFox插件可以通过我的网络服务器从AJAX中提取数据,我会遇到同样的问题 - 我最近一直在考虑的其他问题...)

0 个答案:

没有答案