以下是错误消息: 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。 ...
答案 0 :(得分:1)
错误消息说明了这一切,由于 same-origin-policy ,您无法进行跨域ajax请求(jsonp除外但服务器必须支持) p>
答案 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以正确实施。您还必须为它提供回调函数。