2011-07-05 35 views
3

我正在通過使用JavaScript向DOM添加一個<script>標記,並將該URL包含爲src,從而進行跨域JSON(P)調用。被加載的腳本有一個回調,它在我的頁面上調用一個函數,我想要的數據作爲參數返回給函數。從包含的JavaScript文件中檢測404錯誤

有2個漁獲,但:

  1. 有時JSONP頁面會返回一個400或404錯誤。
  2. 同樣JSONP文件可以多次請求在同一頁上(每次返回不同的數據)

所以,我需要回調函數時不會觸發檢測(這表明JSONP文件返回一個錯誤),但我也需要說明可以請求兩次相同文件的事實。實質上,我需要在加載頁面時檢測到錯誤,但在其他文件完成加載之前我必須執行此操作。是的,這些文件應該以正確的順序加載(或返回一個錯誤)。

一(低效)溶液:

我可以使一束要求爲每個不同的文件負載(例如callbackFunction0,callbackFunction1等),不同的功能。這樣,我可以簡單地確定其中一個函數何時不會觸發,並讓我的JavaScript不起作用。然而,這會佔用很多空間並且效率低下,因爲我必須在腳本在同一頁面上加載的最長時間內有一個回調函數(這個數字沒有明確的值,所以如果我只有15個函數和腳本被請求了20次,會發生錯誤)。

這是很難解釋,但希望你有想法。謝謝。

回答

0

爲了解決這個問題,我做了回調包含一個包含請求編號的變量。所以回調可能是var requestnumber=0;callbackFunction。然後我可以找出哪個請求適用於哪個元素。我以前應該想到這一點。

2

$.ajax有很多你可以利用的回調函數。

$.ajax({ 
     url: "test.html?callback=?", 
     dataType: "jsonp", 
     success: function(data){ 
     // your logic 
     } 
     statusCode: { 
     404: function() { 
      alert('page not found'); 
     } 
     } 
}); 
+0

我不使用jQuery(不幸)。此外,這是跨域的工作嗎? – Gus

+0

這個**是**'jsonp',它跨域工作。 –

1

你可以給包含腳本的id/number/position的callback函數添加一個參數。所以像callbackFunction(1,...其餘的參數..)。不需要創建新的函數名稱。

您可以通過將onerror事件附加到腳本元素來檢測錯誤。 有點相關:How to trigger script.onerror in Internet Explorer?