0
我正在嘗試使用jQuery來檢查某個網站/端口是否被用戶的計算機阻止/解鎖。我可以讓它正常工作,帶來一些小問題,例如引發錯誤「未捕獲的語法錯誤:意外的代幣<」jQuery jsonp:跳過實際執行jsonp?
有沒有辦法簡單地讓jQuery在頁面上執行get請求來查看返回碼,但實際上並沒有將它作爲javascript注入到網站中?如果沒有,這個代碼是否會有任何副作用?
注意:我沒有自己的網站進行檢查,所以我不能讓他們實現jsonp。
var checkPorts = function() {
var url = "__redacted__" ;
$.ajax({
url: url,
type: "get",
cache: false,
dataType: 'jsonp', // it is for supporting crossdomain
crossDomain : true,
asynchronous : false,
timeout : 5000, // set a timeout in milliseconds
complete : function(xhr, responseText, thrownError) {
if(xhr.status == "200") {
//nothing
}
else {
$("#ports-warning").slideDown();
}
}
});
};
你不能用JSONP來做這件事,因爲它不是一個正常的Ajax請求。 JSONP只是插入一個'腳本'標籤,該過程引導瀏覽器加載任何URL指向的地址(並將其評估爲JavaScript)。但獲取語法錯誤意味着呼叫成功......雖然這似乎不是一個非常可靠的技術。 – 2013-02-20 23:44:27
但「完整」函數如何知道腳本/頁面是否正確加載?是否有一種方法可以將網頁注入爲不是javascript類型的腳本,而是將類型文本或其他沒有實際執行頁面的內容注入網頁? – 2013-02-20 23:51:07
我在'script'元素中玩過一段時間,但是看起來好像每當你將'type'屬性設置爲不觸發腳本執行的東西(例如'text/plain'),那麼' src'甚至沒有加載。所以不,看起來似乎沒有辦法,至少用'腳本'。你可能可以使用'iframe'元素並聽取它的'load'事件。 http://www.w3.org/TR/2011/WD-html5-20110525/the-iframe-element.html#the-iframe-element。 (這就是jQuery的'complete'回調的工作原理,只是它插入了一個'script'元素)。 – 2013-02-21 00:12:42