使用XMLHttpRequest发出CORS Ajax请求

瓦姆西安波卢

这是根据提供的示例验证geoJSON的代码:

 function processSuccess(data){
            if(data.status==="ok")  console.log("You just posted some valid geoJSON");
            else if(data.status==="error") console.log("There was a problem with your geoJSON "+data.message);
        }
        function processError(data){
            console.log("The AJAX request could not be successfully made");
        }
        $.ajax({
            url: 'http://geojsonlint.com/validate',
            type: 'POST',
            data: geo,
            dataType: 'json',
            success: processSuccess,
            error: processError
        });   

我正在尝试geoJSON使用以下代码进行验证

  var getXHR=function()
{
    try{return new XMLHttpRequest();}   catch(e){}
    try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}    catch(e){}
    try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}    catch(e){}
    try{return new ActiveXObject("Microsoft.XMLHttp");}     catch(e){}
    console.err("Could not find XMLHttpRequest");
};
var makeRequest=function(uri,data)
{
    //make the actual XMLHttpRequest
    var xhr=getXHR();
    if('withCredentials' in xhr)    console.log("Using XMLHttpRequest2 to make AJAX requests");
    xhr.open("POST",uri,true);
    xhr.onreadystatechange=function(){
        if(xhr.readyState===4)
        {
            if(xhr.status===200 || xhr.status===304)
            {
                var response=JSON.parse(xhr.responseText);
                if(response.status==="ok")  console.log("You just posted some valid geoJSON");
                else if(response.status==="error")  console.log("There was a problem with your geoJSON "+response.message); 
                else    console.log("Response has been recieved using "+response.status);
            }
        }
        else    console.log("Response recieved with status "+xhr.status);
    };
    xhr.setRequestHeader("Content-Type","application/json");
    xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
    //supported in new browsers...do JSONP based stuff in older browsers...figure out how
    xhr.setRequestHeader("Access-Control-Allow-Origin","http://geojsonlint.com/");
    xhr.setRequestHeader("Accept","application/json");
    xhr.send(JSON.stringify(data));
};

在这里,我提出了实际的要求:

 makeRequest('http://geojsonlint.com/validate',geo);

错误:

我在Chrome控制台中收到此错误:

 Using XMLHttpRequest2 to make AJAX requests gmaps_geoJSON.js:14
 Failed to recieve response gmaps_controls.js:25
 XMLHttpRequest cannot load http://geojsonlint.com/validate. Request header field   
 Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers.   

标题

这是与请求相关的数据:

Request URL:http://geojsonlint.com/validate
Request Method:OPTIONS
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,en-AU;q=0.6,en-GB;q=0.4,te;q=0.2
Access-Control-Request-Headers:access-control-allow-origin, accept, x-requested-with,  content-type
Access-Control-Request-Method:POST
Connection:keep-alive
DNT:1
Host:geojsonlint.com
Origin:http://localhost:8180
Referer:http://localhost:8180/GoogleMapsLoadingTest/MainService? scenario=c&operation=1&objkey=000011&objtype=EQUI&gisuniqkey=hgsfsfsfs2436353535
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/34.0.1847.116 Safari/537.36

Response Headers
Access-Control-Allow-Headers:Origin,Content-Type,Accept
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 24 Apr 2014 14:48:57 GMT
Server:nginx
Transfer-Encoding:chunked
杰森

您不应该将其设置Access-Control-Allow-Origin为请求标头,而是响应标头。

您可以从响应中看到服务器将接受哪些请求标头:

Access-Control-Allow-Headers:Origin,Content-Type,Accept

错误消息告诉您:

Request header field Access-Control-Allow-Origin is not allowed

似乎也可能不接受X-Requested-With

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AJAX 请求未发出

来自分类Dev

CORS jQuery AJAX请求

来自分类Dev

CORS jQuery AJAX请求

来自分类Dev

使用沙箱从Chrome应用发出Ajax请求

来自分类Dev

如何使用Express框架发出AJAX请求?

来自分类Dev

我无法使用Ruby发出Ajax请求

来自分类Dev

如何使用XMLHttpRequest对象发出发布请求?

来自分类Dev

从商店发出AJAX请求

来自分类Dev

同步发出多个ajax请求

来自分类Dev

如何从服务发出ajax请求?

来自分类Dev

针对cors / ajax请求的重复OPTIONS请求

来自分类Dev

CORS google chrome 扩展有什么替代品吗?如何在不使用 CORS 的情况下成功发出 ajax 请求?

来自分类Dev

如何在MVC中使用防伪令牌发出Ajax请求

来自分类Dev

如何使用Ajax-core + Polymer发出JsonP请求

来自分类Dev

如何在MVC中使用防伪令牌发出Ajax请求

来自分类Dev

TWIG select onChange 使用参数发出 AJAX 请求

来自分类Dev

如何使用 for 循环发出多个 AJAX 请求

来自分类Dev

在setState()的回调中发出AJAX请求

来自分类Dev

在ReactJS中从哪里发出初始AJAX请求

来自分类Dev

测试尚未以角度发出ajax请求

来自分类Dev

如何创建发出ajax请求的angularjs指令?

来自分类Dev

从CouchDB显示功能发出AJAX请求

来自分类Dev

在Yii 2.0中发出Ajax请求?

来自分类Dev

减少AJAX发出的服务器请求

来自分类Dev

通过AJAX发出的PHP请求失败

来自分类Dev

ExtJs Ajax向Geoserver发出的请求

来自分类Dev

单击表行时如何发出 Ajax 请求?

来自分类Dev

Rails `remote: true` 不发出 AJAX 请求

来自分类Dev

如何在 React 中发出 AJAX 请求?