2013-02-20 53 views
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(); 
      } 
     } 
    }); 
}; 
+0

你不能用JSONP來做這件事,因爲它不是一個正常的Ajax請求。 JSONP只是插入一個'腳本'標籤,該過程引導瀏覽器加載任何URL指向的地址(並將其評估爲JavaScript)。但獲取語法錯誤意味着呼叫成功......雖然這似乎不是一個非常可靠的技術。 – 2013-02-20 23:44:27

+0

但「完整」函數如何知道腳本/頁面是否正確加載?是否有一種方法可以將網頁注入爲不是javascript類型的腳本,而是將類型文本或其他沒有實際執行頁面的內容注入網頁? – 2013-02-20 23:51:07

+0

我在'script'元素中玩過一段時間,但是看起來好像每當你將'type'屬性設置爲不觸發腳本執行的東西(例如'text/plain'),那麼' src'甚至沒有加載。所以不,看起來似乎沒有辦法,至少用'腳本'。你可能可以使用'iframe'元素並聽取它的'load'事件。 http://www.w3.org/TR/2011/WD-html5-20110525/the-if​​rame-element.html#the-if​​rame-element。 (這就是jQuery的'complete'回調的工作原理,只是它插入了一個'script'元素)。 – 2013-02-21 00:12:42

回答

0

還有就是$.ajax沒有asynchronous財產,你的意思async?查看瀏覽器的調試器,看看請求是如何做出的,它必須是XHR,因爲你的方法有任何工作機會。另外,如果您使用jQuery 1.9.x,請使用jQuery Migrate插件進行嘗試。