停放域上的ajax

时间:2011-01-12 02:33:06

标签: jquery ajax dns

我目前正在编写这个jquery,并且由于某种原因(我不知道为什么)它在普通域上工作,但在停放的域上却没有。

普通域名 - http://www.thefinishedbox.com 托管域名 - http://www.tfbox.com

如果你向下滚动到殖民地新闻并点击我点击链接,你会看到它将通过普通域上的jquery ajax检索数据,但是在停放的域上它不会。

这是我到目前为止的jQuery代码(非常标准):

$(function() {

$.ajaxSetup({
    cache: false
});
var ajax_load = "Load me plz";

//    load() functions
var loadUrl = "http://thefinishedbox.com/wp-content/themes/tfbox-beta/test.php";

$('.overlay').css({
    opacity: '0'
});
$('.toggle').click(function() {
    $('.overlay').css({
        display: 'block'
    }).animate({
        opacity: '1'
    }, 300);

    $(".overlay .content").html(ajax_load).load(loadUrl);

    return false;
});
$('.close').click(function() {
    $('.overlay').animate({
        opacity: '0'
    }, 300);
    $('.overlay').queue(function() {
        $(this).css({
            display: 'none'
        });
        $(this).dequeue();
    });
    return false;
});

当谈到ajax时,我是一个完整的菜鸟,所以任何帮助都会得到大力赞赏。

3 个答案:

答案 0 :(得分:2)

因为您无法在其他域上执行Ajax请求,除非您已相应地设置了权限。它被称为“跨域Ajax”。

如果你绝对需要让它工作,你可以稍微修改你的代码:

var loadUrl = "http://"+window.location.hostname+"/wp-content/themes/tfbox-beta/test.php";

或使用变通方法(不推荐):http://www.usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

答案 1 :(得分:1)

出于安全原因,通常禁止Ajax请求从其他主机名加载内容。如果您只是从其他网站加载内容,则可以加载人们的银行详细信息等。

解决此限制的常用方法是使用JSON-P,但这需要其他网站的支持。

答案 2 :(得分:1)

您可以在php页面上写这个以将域名存储在js变量中。这样,您就可以在任一域上使用相同的代码。

<script type="text/javascript">var domain = '<?php echo $_SERVER['HTTP_HOST']; ?>';</script>
<script type="text/javascript" src="yourJavascriptFile.js"></script>

然后在js文件中使用该变量,如下所示:

//    load() functions
var loadUrl = domain + "/wp-content/themes/tfbox-beta/test.php";