HTML,Javascript:ajax调用和更改iframe源之间的区别

时间:2012-11-06 04:23:33

标签: javascript html ajax iframe

上下文:我正在尝试将javascript函数编码为喜欢tumblr上的某个帖子,基于此link。我尝试使用ajax调用而不是更改iframe的源代码,但它不起作用。当然,更改iframe的来源是有效的。

那么,有什么不同之处呢?

$baseUrl = 'http://tumblr.com/like/';

function LikePost( $postID, $reblogUrl )
{
    /*
    http://www.tumblr.com/<command>/<oauthId>?id=<postId>
    <command>: like or unlike
    <oauthId>: last eight characters of {ReblogURL}
    <postId>: {PostID}

     Exemple of Url
     http://www.tumblr.com/like/fGKvAJgQ?id=16664837215

    */
    $oauthId = $reblogUrl.substring( $reblogUrl.length - 8, $reblogUrl.length);
    $likeUrl = $baseUrl + $oauthId + '?id=' + $postID;

    $.ajax({
        url: $likeUrl,
        type:'POST'            
        });

}

2 个答案:

答案 0 :(得分:1)

AJAX请求受相同域策略的约束,但有些例外情况不值得列出,因为除非您控制这两个域,否则它们不起作用。

在这种情况下,您正在从您的网站调用tumblr域,而您无法通过AJAX进行调用。但是,iframe,脚本元素和img元素可以指向任何域,因此如果类似的url没有向您返回任何内容,您可以使用任何这些方法来记录类似内容。

如果您不想使用iframe,您可以使用的另一种方法是通过AJAX向您的服务器发出请求,然后将请求代理到tumblr。您的服务器可以访问它想要的任何URL。

然而,iframe方法最简单。我建议你走这条路,因为你已经开始工作了。 ;)

答案 1 :(得分:1)

它们用于不同目的。正如上面提到的jmort253,AJAX调用仅适用于同一个域,而iframe可能跨越不同的域。但是,如果您对从同一个域加载数据感兴趣,AJAX可能是更好的选择。很多时候,在使用IFrame时,你会在页面的标签栏上看到一个加载标志,显示其中的某些内容正在加载(它是加载的IFrame页面,而不是整个页面),这是你不想要的用户可以看到,因为它是AJAX点,无缝地加载数据,让用户产生几乎同时出现数据的错觉。使用AJAX,您将不会遇到这些问题。

即使你想加载来自不同域的数据,虽然Javascript本身不能完成任务,你可以使用PHP来完成加载部分,然后使用Javascript从那里获取数据。