AJAX跨域请求

时间:2011-06-11 15:52:26

标签: javascript jquery ajax cross-domain

我的主域名上有我的JavaScript文件,我想从子域名做一些调用。

我已添加:

url: "http://domain.com/ajax.php"

所以完整的代码是:

    $.ajax({
        type: "POST",
        url: "http://domain.com/ajax.php",
        data: {
            var1: var1,
            var2: var2
        },
        success: function(data){

        }
    });

但是在Firebug上,它将请求显示为红色,并且无法响应。 POST参数也应该存在。

我应该在子域上创建一个新的JS文件并添加必要的代码并从那里进行AJAX调用吗?

编辑:使用JSONP代码

我在localhost/ajax.php上使用此功能,我从sub.localhost

拨打电话
    $.ajax({
        dataType: 'jsonp',
        data: 'id=10',
        jsonp: 'jsonp_callback',
        url: 'http://localhost/ajax.php',
        success: function (data) {
            console.log(data);
        },
    });

并且ajax.php包含:

<?php
echo $_GET["id"];
?>

3 个答案:

答案 0 :(得分:4)

您可以使用Access-Control-Allow-Origin标头启用跨域请求。

阅读本文:Cross-Origin Resource Sharing (CORS)

答案 1 :(得分:2)

假设你有jQuery 1.5+,你可以使用:

$.ajax({

    crossDomain:true,
    type: "POST",
    url: "http://domain.com/ajax.php",
    data: {
        var1: var1,
        var2: var2
    },
    success: function(data){

    }

});

来自DOCS:

crossDomain(已添加1.5)

Default: false for same-domain requests, true for cross-domain requests

如果要在同一域上强制执行跨域请求(例如JSONP),请将crossDomain的值设置为true。例如,这允许服务器端重定向到另一个域

答案 2 :(得分:0)

对于子域名调用,您有两个选择:

  1. 双方使用document.domain

  2. 使用jsonP,通过jQuery 1.5的crossDomain ajax规范或directly