<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
     alert(data);
});
</script>

它对那个URL做一个OPTIONS请求,然后回调永远不会被调用任何东西。

当它不是跨域时,它工作得很好。

jQuery不应该只是调用一个<script>节点,然后在它加载时做回调吗?我知道我将无法得到的结果(因为它是跨域),但这是可以的;我只想让电话接通。这是bug,还是我做错了什么?


当前回答

看起来Firefox和Opera(在mac上也测试过)不喜欢这种交叉域(但Safari没问题)。

您可能必须调用本地服务器端代码来压缩远程页面。

其他回答

我也有同样的问题。我的修复是添加头到我的PHP脚本,只有在开发环境中才会出现。

这允许跨域请求:

header("Access-Control-Allow-Origin: *");

这告诉preflight请求,客户端可以发送任何它想要的头文件:

header("Access-Control-Allow-Headers: *");

这样就不需要修改请求了。

如果您的开发数据库中有可能泄露的敏感数据,那么您可能要三思。

只需将“application/json”更改为“text/plain”,不要忘记json .stringify(request):

var request = {Company: sapws.dbName, UserName: username, Password: userpass};
    console.log(request);
    $.ajax({
        type: "POST",
        url: this.wsUrl + "/Login",
        contentType: "text/plain",
        data: JSON.stringify(request),

        crossDomain: true,
    });

我能够修复它与以下头的帮助

Access-Control-Allow-Origin
Access-Control-Allow-Headers
Access-Control-Allow-Credentials
Access-Control-Allow-Methods

如果你使用的是Nodejs,下面是你可以复制/粘贴的代码。

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin','*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH');
  next();
});

OPTIONS来自http://www.w3.org/TR/cors/,请参阅http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/了解更多信息

我不相信jQuery会在给定URL时自然地执行JSONP请求。然而,当你告诉它回调使用什么参数时,它会做一个JSONP请求:

$.get("http://metaward.com/import/http://metaward.com/u/ptarjan?jsoncallback=?", function(data) {
     alert(data);
});

完全由接收脚本来使用该参数(不一定要称为“jsoncallback”),因此在这种情况下,函数将永远不会被调用。但是,因为你说你只是想在metaward.com脚本执行,这将使它。