2012-11-06 63 views
1

上下文:我試圖編寫一個javascript函數來像tumblr上的某個帖子,基於這個link。我嘗試使用ajax調用而不是更改iframe的源,但它不起作用。當然,更改iframe的來源是有效的。HTML,Javascript:ajax調用和改變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'    
     }); 

} 

回答

1

AJAX請求由同一個域策略的約束,但有一些例外是不值得上市,因爲它們,除非你控制兩個域不起作用。

在這種情況下,您從您的網站調用了一個tumblr網域,您無法通過AJAX進行此操作。但是,iframe,腳本元素和img元素可以指向任何域,因此如果類似的url沒有向您返回任何內容,則可以使用任何這些方法來記錄類似內容。

如果您不想使用iframe,則可以使用的另一種方法是通過AJAX向您的服務器發送請求,然後將請求代理到tumblr。你的服務器可以去任何它想要的網址。

但是,iframe方法最簡單。我建議你走這條路,因爲你已經有了它。 ;)

+1

好的,謝謝你的快速響應。我會將它標記爲答案(8分鐘後,哈哈) – gdube

1

它們用於不同的目的。正如上面提到的jmort253,AJAX調用僅適用於相同的域,而iframe可能跨越不同的域。但是如果你有興趣從同一個域加載數據,AJAX可能是更好的選擇。很多時候,在使用IFrame的時候,你會在頁面的標籤欄上看到一個加載標誌,顯示裏面的東西正在加載(它是加載的IFrame頁面,而不是整個頁面),你不想要用戶可以看到,因爲那是,點的AJAX,無縫地加載數據,給用戶一種錯覺,認爲數據幾乎是同時發生的。與AJAX,你不會有這些問題。

即使您想要加載來自不同域的數據,而Javascript本身並不適合您的任務,您可以使用PHP來執行加載部分,然後使用Javascript從那裏獲取數據。