2011-06-03 98 views
1

如何告訴jQuery自動使用「jsonp」進行跨域ajax請求,同時繼續使用「json」進行同域請求?我想在JavaScript中編寫客戶端庫,僅在必要時才使用jsonp。讓我們這個小片段爲例:自動使用jsonp進行跨域ajax請求

jQuery.ajax(url, { 
    dataType: "jsonp" 
}); 

當數據類型爲「JSONP」然後jQuery的總是使用JSONP但已經自動檢測,如果它可以發送一個正常的Ajax請求(同域請求),或者如果它必須使用JavaScript注入(用於跨域請求)。

因此,看來jQuery已經能夠自動檢測到這一點,並決定使用哪種技術。但是當標準的Ajax請求可能時,不需要使用jsonp,所以我只想爲「跨域請求」使用「jsonp」。我怎樣才能做到這一點?

或者也許有可能問,如果一個URL是跨域的或不是?然後我可以自己檢查這個,並用不同的數據類型調用jQuery.ajax。

+0

如果你要編寫處理JSONP的代碼,它有什麼不同?通過jQuery它或多或少都是透明的;你的回調被稱爲某種方式或其他。 – Pointy 2011-06-03 13:20:17

+0

比方說,我喜歡只在必要時才使用「黑客」。而JSONP是必要的,直到CORS被所有主流瀏覽器支持。 – kayahr 2011-06-03 13:27:30

+0

如果你要在JavaScript庫中使用標準方法,那麼會有輕微的黑客攻擊。你可以檢查當前的網址和目標網址。不理想但相當簡單。 – 2011-06-03 13:28:04

回答

2

您可以使用類似this的東西,然後檢查scheme/hostname是否匹配。解析url的一個簡單方法是創建一個a元素並讓瀏覽器爲您提供url部分。

function sameOrigin(url){ 
    var link = document.createElement("a"); 
    link.href = url; 

    return ((link.protocol + link.host) === window.location.protocol + window.location.host); 
} 


    var url = "http://stackoverflow.com/questions/6227584/jquery-automatic-usage-of-jsonp-for-cross-domain-ajax-requests"; 
    if (sameOrigin(url)){ 
    // use json 
    }else{ 
    // use jsonp 
    }