2011-08-21 113 views
4

我正在爲iOS和Android平臺構建PhoneGap - Sencha-touch應用程序。我使用Ext.Ajax.request()函數加載本地.js文件。Ext.Ajax.request()在成功請求時調用失敗回調函數

有趣的事情發生 - 請求成功,但'失敗'回調被稱爲。 下面是代碼:

Ext.Ajax.request({ 
     url: 'localfolder/foo.js', 
     success : function(xhr){ 
      // not invoked 
     }, 
     failure : function(response, options){ 
      // response.status == 0 
      // wtf, response.responseText contains exactly the contents of the local .js file! 
     } 
    }); 

任何人有一個想法,爲什麼的時候,其實要求succedded的「失敗」觸發回調? 更重要的是,我如何讓'成功'回調被觸發呢?

+0

什麼response.status? – chrixian

+0

response.status == 0(我編輯了問題並添加了這個信息) – gardenofwine

回答

9

Ext.Ajax只是簡單地檢查它創建的底層XHR(XmlHttpRequest)對象的狀態碼。但是,它(錯誤地)認爲該狀態是HTTP狀態。正如Mozilla-provided article所討論的那樣,當使用file:或ftp:方案時,狀態值0表示成功。

您可以修改Ext.data.Connection(在src/data/Connection.js)中的onComplete函數來查看URL的方案,並決定它是應該使用基於HTTP的狀態還是使用「0 =確定「狀態以確定成功。

對於非成功的結果來說,擁有可供客戶使用的主體是完全合法的。這就是爲什麼你的response.responseText仍然顯示正確。

+0

謝謝@mmigdol,我不知道http:,file:或ftp:的不同成功代碼。 我的確設法通過確實指定一個onComplete函數來覆蓋'失敗'函數。但是我正在尋找一種方法來引起「成功」功能的調用,只是爲了讓我的代碼更加一致。 – gardenofwine

0
我通常使用響應這樣

,也許它會幫助

{ 
    success:true, // success status 
    data: [] // data from process 
} 
+0

嗨,我加載一個本地.js文件,我該如何添加json對象到響應?響應是我的本地.js文件 – gardenofwine

+0

的全部內容用xhr替換[],所以它會像{ 成功:true,data:xhr } –