1

背景:我正在尝试编写一个javascript函数来喜欢tumblr上的某个帖子,基于这个链接。我尝试使用 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'            
        });

}
4

2 回答 2

1

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

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

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

但是,iframe 方法是最简单的。我建议走那条路,因为你已经开始工作了。;)

于 2012-11-06T04:26:48.443 回答
1

它们用于不同的目的。正如上面提到的 jmort253,AJAX调用仅适用于同一个域,而 iframe 可能跨越不同的域。但如果您有兴趣从同一域加载数据,AJAX可能是更好的选择。很多时候,在使用 IFrame 时,您会在页面的标签栏上看到一个正在加载的标志,表明它内部的某些内容正在加载(正在加载的是 IFrame 页面,而不是整个页面),这是您不想要的用户看到,因为那是无缝加载数据关键AJAX,给用户一种数据几乎同时到来的错觉。有了AJAX,你就不会有这些问题了。

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

于 2012-11-06T04:34:43.487 回答