无法使用ajax获取请求

时间:2011-08-30 21:06:55

标签: javascript ajax jquery

以下是错误消息: XMLHttpRequest无法加载(url1)。 Access-Control-Allow-Origin不允许原点http://localhost:8081

以下是代码:

$.ajax({
    url: (the url2),
    async : false,
    data: { fbId     : eh,
            fbSecret : meh,
            key      : bleh
          },
    datatype: "json",
    success: function(result){
                 console.log(result);
             }
});

我知道网址是正确的,因为当我点击它时它会给我我需要的数据,就像{"名称" :[" blah"]}

我是否需要提供更多细节?

我尝试过各种各样的事情,例如使用jsonp / html而不是json,将数据直接放入url而不是单独作为数据,并使用$ .get而不是$ .ajax,以及编辑$ .ajaxsetup。 ...

5 个答案:

答案 0 :(得分:1)

错误消息说明了这一切,由于 same-origin-policy ,您无法进行跨域ajax请求(jsonp除外但服务器必须支持) p>

这可能对您有所帮助http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

答案 1 :(得分:0)

端口不匹配;)尝试建立请求的页面必须位于同一端口;)

答案 2 :(得分:0)

我认为您正在尝试访问与您提供脚本的服务器不同的服务器 - 从服务器A提供的页面内的JavaScript代码只能使用XmlHttpRequest访问服务器A.

如果这是问题,则没有简单的解决方案 - 您必须使用代理或完全避免使用XmlHttpRequest。

答案 3 :(得分:0)

same-origin-policy是一种浏览器安全措施,它限制JavaScript代码与源自其他网站的资源进行通信,即从任何其他域和/或端口加载的资源。例如。在http://google.com:80上的网页中运行的JS无法与从http://cbs.com甚至http://cbs.com:8081加载的数据进行交互

解决SOP问题 a)服务器中的代理:您在应用中创建一个与外部URL对话并返回结果的终点

b)将JSON响应加载到<script>标记中,否则jsonp即带有填充的json

例如:

var url = "http://localhost:8081/?queryString=asdsa&callback=jsonCallback";

var script = document.createElement("script");
script.setAttribute("src", url);
script.setAttribute("type", "text/javascript");

window.jsonCallback = function(jsonObj) {
  // use JSON object here

  // cleanup
  document.body.removeChild(script);
  delete window[callback];
}

document.body.appendChild(script)

在你的情况下,因为你运行的是另一个端口,它是无效的,因此浏览器抛出错误..

并且有一些服务器端更改与此一起...阅读如何为您的脚本语言执行此操作..

基本上响应应该是这样的:

jsonCallback({"Name": "Random", "Id" : 2432, "Rank": 453})

答案 4 :(得分:0)

使用dataType: "JSONP"克服遇到的限制;查看documentation以正确实施。您还必须为它提供回调函数。