Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает callback-функция ajax jsonp запроса 
V
    Опции темы
zodiac
Дата 17.6.2013, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.7.2009

Репутация: нет
Всего: нет



Здравствуйте!
Столкнулся со странной проблемой: никак не хочет вызываться callback функция, когда я пытаюсь сделать кроссдоменный GET jsonp запрос на сервер. Ответ сервера - полностью валидный json, который прекрасно парсится и понимается jquery. При попытке посмотреть сообщения об ошибках я получаю следующее:
- содержимое textStatus:
parseerror
- содержимое errorThrown:
jsonpCalback was not called

Код ajax-запроса:
Код

$.ajax({
    url: url,
    type:"get",
    dataType: "jsonp",
    jsonp:"callback",
    jsonpCallback:"jsonpcall"
  }).fail(function(jqXHR, textStatus, errorThrown) {
     alert(jqXHR.responseText+' - '+textStatus+' - '+errorThrown);
  }).done(function(data, textStatus, jqXHR) {
      alert(textStatus);
  });


В процессе решения чего только не пробовал: по советам со StackOverflow ставил jsonp:false, пробовал указывать jsonpcall глобально (window.jsonpcall=function...), пробовал использовать простой $.getJSON и множество других телодвижений, которые, однако, не помогли. Имя callback-функции успешно подставляется в url, но вызывается fail().

Помогите разобраться, пожалуйста, совершенно не знаю, что с этим делать :(
PM MAIL   Вверх
zodiac
Дата 17.6.2013, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.7.2009

Репутация: нет
Всего: нет



Все в порядке, проблема решена неожиданным способом.

Решение
При jsonp запросах ответ сервера не должен представлять собой json-объект. Это должна быть функция, параметром которой передан валидный json.

Для примера, когда jquery-код имеет следующий вид...
Код

$.ajax({
    url: url,
    type:'get',
    dataType: 'jsonp',
    jsonp:'callback',
    jsonpCallback:"jsonpcall"
});


...сервер должен отдать ответ в следующем формате:
Код

jsonpcall({"data":"variable"})


Со стороны php-кода это выглядит так:
Код

$data='jsonpcall({"data":"variable")';
exit($data);


Надеюсь, кому-то данная информация окажется полезной и не заставит тратить пять часов  smile 
PM MAIL   Вверх
Staind
Дата 16.10.2014, 14:25 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 17.12.2007
Где: Планета сокровищ

Репутация: нет
Всего: 3



zodiac, спасибо, что отписался. Помог разобраться.
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.