2012-02-20 3 views
2

У меня возникают проблемы с преобразователями jQuery.ajax - я не могу заставить мой конвертер быть вызванным.Конвертер jQuery.ajax не называется

Я получил этот JQuery AJAX код (упрощенный для вопроса):

$.ajax({ 
    url: "http://myurl/myservice", 
    dataType: "JSONP", 
    cache: false, 
    success: function (data, textStatus, jqXHR) { /* do stuff */ }, 
    error: function (jqXHR, textStatus, errorThrown) { /* do stuff */ }, 
    timeout: 5000, 
    converters: { "JSONP": myConversionFunction } 
}); 

Когда я использую этот код, функция преобразователя myConversionFunction не вызывается. Я хочу использовать конвертер для преобразования дат в ответе как шоу в других вопросах SO, но просто не могу его уволить.

Использование скрипача Я проверил ответ, и это JSONP, с типом контента «application/x-javascript».

Любые идеи, что я делаю неправильно?

Thanks, Chris.

ответ

4

Я думаю, вы не можете перезаписать преобразователи по умолчанию jQuery, такие как json. Представьте свой собственный конвертер вместо (и включать text в вашем спецификатора, так как в этом случае это преобразование текста в ваш выход):

$.ajax({ 
    url: "http://myurl/myservice", 
    dataType: "jsonp myConversion", 
    cache: false, 
    success: function (data, textStatus, jqXHR) { /* do stuff */ }, 
    error: function (jqXHR, textStatus, errorThrown) { /* do stuff */ }, 
    timeout: 5000, 
    converters: { 
     "text myConversion": function(value) { 
      console.log("pre-processing..."); 
      /* do stuff */ 
      return value; 
     } 
    } 
}); 

+0

(Удалено предыдущий комментарий - я неправильно понял решение). Спасибо, Джулиан, ты поставил меня на правильный путь. Добавление моего собственного преобразования гарантирует получение вызова функции. – Chris

+0

Я пытаюсь сделать это, и это не работает для меня. Я хочу предварительно обработать что-то, что возвращает HTML и рассматривать его как JSONP. Я даже изменил «text myConversion» на «* myConversion». Просто укажите URL-адрес на все, что возвращает HTML (например, www.google.com). Я получаю синтаксическую ошибку в IE/Chrome, и она терпит неудачу в FF. – alexp

+1

JSONP ожидает, что исходный возвращаемый контент будет действительным JavaScript: это фактически вызов '

1

Я использую подобный код для управления «D» данные asp.net:

$.ajaxSetup({ 
    data: "{}", 
    dataType: "jsonp", 
    type: "POST", 
    contentType: "application/json", 
    converters: 
     { 
      "json jsonp": function(msg) 
      { 
       return msg.hasOwnProperty('d') ? msg.d : msg; 
      } 
     }, 
    error: function(xhr, textStatus, errorThrown) 
    { 
     var errorMessage = "Ajax error: " + this.url + " : " + textStatus + " : " + errorThrown + " : " + xhr.statusText + 
       " : " + xhr.status; 
     if (xhr.status != "0" || errorThrown != "abort") 
     { 
      alert(errorMessage); 
     } 
    } 
}); 

возможно, вам нужно, чтобы сделать его в нижнем регистре, как:

converters: 
    { 
     "json jsonp": function(msg) 
     { 
      return yourfunction(msg); 
     } 
    } 
+0

Спасибо за ответ, но не повезло. Я попытался изменить тип данных на «jsonp», а затем пробовал всевозможные совпадения ключей конвертера, такие как «json jsonp», «json», «jsonp», но функция не вызывается. – Chris

+0

Вы пробовали помещать contentType? 'contentType:" application/json ",' –

+0

Я не делаю jsonp, но вы можете переопределить json вот так: –

Смежные вопросы