2010-05-04 30 views
1
$.ajax(
{ 
    url : "http://search.twitter.com/search.json?q=google&lang=en&rpp=10&since_id=&callback=?", 
    dataType : 'json', 
    success : function(data) 
    { 
     alert(data.results.length); 
    } 
}); 

這是如何工作的?我的意思是跨域請求。這個跨域請求是如何工作的?

回答

1

我相信jQuery意識到它是跨域的,因此使用適當的src屬性(而不是發出ajax請求)向頁眉添加腳本標記。這會加載JSON,然後觸發回調。

+0

哦......好的。但爲什麼當我用http://api.twitter.com/1/users/show/google.json&jsoncallback=替換URL?我得到403禁止? – Phonethics 2010-05-04 13:32:09

2

jQuery在全局範圍內定義您的回調函數,然後用callback=nameItGaveTheFunction替換URL中的callback=?

然後它作爲一個正常的JSONP請求;使用腳本標籤,並將迴應封裝在回調函數中。

6

jQuery檢測到URL的callback=?部分,並自動將數據類型從'json'切換爲'jsonp'

JSONP是不是使用XMLHttpRequest製作的JSON查詢,而是通過向您的頁面添加腳本標記。回調腳本的過程由調用者提供腳本加載時執行的JavaScript函數的名稱。這就是跨域運作的原因。

jQuery將在$ .ajax請求中爲您透明地處理JSONP。這個手冊(和我更清潔)的方式是定義一個'jsonp'數據類型,並使用佔位符?作爲URL中的回調名稱。 jQuery將自動替換?以適當的值觸發您的成功回調。

$.ajax(
{ 
    url : "http://api.twitter.com/1/users/show/google.json&jsoncallback=?", 
    dataType : 'jsonp', 
    success : function(data) 
    { 
     alert(data.results.length); 
    } 
});