<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,还是我做错了什么?


当前回答

如果你想POST

确保JSON。Stringify您的表单数据和发送文本/纯。

<form id="my-form" onSubmit="return postMyFormData();">
    <input type="text" name="name" placeholder="Your Name" required>
    <input type="email" name="email" placeholder="Your Email" required>
    <input type="submit" value="Submit My Form">
</form>

function postMyFormData() {

    var formData = $('#my-form').serializeArray();
    formData = formData.reduce(function(obj, item) {
        obj[item.name] = item.value;
        return obj;
    }, {});
    formData = JSON.stringify(formData);

    $.ajax({
        type: "POST",
        url: "https://website.com/path",
        data: formData,
        success: function() { ... },
        dataType: "text",
        contentType : "text/plain"
    });
}

其他回答

事实上,由于安全原因,跨域AJAX (XMLHttp)请求是不允许的(考虑一下从客户端获取一个“受限”的网页并将其发送回服务器——这将是一个安全问题)。

唯一的解决方法是回调。这是:创建一个新的脚本对象,并将src指向端JavaScript,这是一个带有JSON值的回调(myFunction({data}), myFunction是一个对数据做一些事情的函数(例如,将其存储在变量中)。

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

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

在我的例子中,这个问题与CORS无关,因为我正在向同一个web服务器发出jQuery POST。数据是JSON,但我省略了dataType: ' JSON '参数。

正如上面David Lopes的回答所示,我没有(也没有添加)contentType参数。

只需将“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,
    });

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

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

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