Ext.Ajax.request () вызывает функцию обратного вызова сбоя после успешного запроса - PullRequest
4 голосов
/ 22 августа 2011

Я создаю приложение PhoneGap - Sencha-touch для платформ iOS и Android. Я загружаю локальный файл .js с помощью функции Ext.Ajax.request ().

Происходит забавная вещь - запросы выполняются успешно, но вызывается обратный вызов «fail». Вот код:

   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!
       }
   });

У кого-нибудь есть идея, почему обратный вызов 'fail' срабатывает, когда фактически запрос удовлетворен? [редактировать] Что еще более важно, как мне сделать так, чтобы вместо этого вызывался обратный вызов «success»?

Ответы [ 2 ]

9 голосов
/ 22 августа 2011

Ext.Ajax просто проверяет код состояния базового объекта XHR (XmlHttpRequest), который он создает.Тем не менее, он (неправильно) предполагает, что статус является HTTP-статусом.В этой статье, предоставленной Mozilla , при использовании схем file: или ftp: значение состояния 0 указывает на успех.

Вы можете изменить функцию onComplete в Ext.data.Connection.(в файле src / data / Connection.js), чтобы посмотреть схему URL-адреса и решить, следует ли использовать HTTP-статус или статус «0 = ОК» для определения успеха.

Этосовершенно законно для неуспешных результатов иметь тело, которое может быть использовано клиентом.Вот почему ваш response.responseText по-прежнему отображается правильно.

0 голосов
/ 04 ноября 2011

Я обычно использую ответ, подобный этому, может быть, это поможет

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