2011-08-30 116 views
0

以下是错误消息: XMLHttpRequest无法加载(url1)。 Access-Control-Allow-Origin不允许使用原产地http://localhost:8081使用ajax无法获取请求

下面是代码:

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

我知道网址是正确的,因为当我点击它,它给了我,我需要的数据,这就好比{“名字”:“嗒嗒”]}

我是否需要提供更多详细信息?

我已经尝试过使用jsonp/html而不是json,将数据直接放入url中而不是单独作为数据,并使用$ .get而不是$ .ajax,并编辑$ .ajaxsetup。 ..

+3

出于安全原因,AJAX请求不被允许到其他域。谷歌应该告诉你这个... – Bojangles

回答

1

错误消息说,这一切,你不能跨域Ajax请求(例外JSONP的情况下,但也必须由服务器支持)由于same-origin-policy

这可能会帮助你这里http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

+0

嗯,有什么办法可以重写这个吗? –

+0

':)'不能覆盖它,但你可以让一个服务器端代理,可以访问这个服务,然后你可以做一个Ajax请求到你的服务器代理,它将返回你的JSON响应 – Rafay

+0

..或者你可以使用JSON填充;)真的不知道你的意思是“在jsonp的情况下的异常,但也必须由服务器支持”.. – walialu

0

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

+1

为什么downvote?这是完全正确的。 –

0

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

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

0

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

工作围绕互动SOP 一)代理在您的服务器:您创建您的应用程序一个终点,讨论到的外部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}) 
0

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