上下文:我正在尝试将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'
});
}
答案 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从那里获取数据。