Загрузка ajax не может обработать ответ JSON или выдает всплывающее окно загрузки - PullRequest
3 голосов
/ 11 мая 2010

Я использую плагин AJAX от Andris Valums:

Это прекрасно работает, за исключением того факта, что я не могу отправить правильный JSON в качестве ответа. Я устанавливаю заголовки 'Content-Type', 'application / json' перед отправкой ответа в кодировке JSON, и в плагине я говорю, что ожидаю JSON:

responseType: "json",

Это дает мне всплывающее окно загрузки с просьбой загрузить файл JSON / REPONSE. Странно то, что когда я не даю правильный «Content-Type» на мой ответ, это работает.

Конечно, я хочу передать правильный тип ответа, потому что все мои вызовы jQuery 1.4 зависят от правильного JSON.

У кого-нибудь еще была такая же проблема или есть кто-нибудь, кто хотел бы попробовать это?

Я бы хотел использовать этот плагин, но только когда смогу вернуть правильный JSON с правильным типом контента

Спасибо за вашу помощь!

Ответы [ 3 ]

3 голосов
/ 11 мая 2010

Вам не нужно указывать application / json в качестве типа содержимого ответа.

Вы можете использовать Content-Type: text / plain и использовать функцию eval ('(' response ')'), чтобы оценить ваш ответ и присвоить его переменной JavaScript.

Пример, приведенный Деймоном, объясняет это более подробно.

Другие вещи, которые вы можете проверить:

  • Удостоверьтесь, что ваши заголовки отправлены ПЕРЕД отправкой любого вывода
  • Убедитесь, что ваш ответ является допустимой строкой в ​​кодировке JSON
1 голос
/ 11 мая 2010

Плагин создает невидимый файл ввода на верхнюю часть кнопки, которую вы предоставляете, поэтому, когда пользователь нажимает на кнопку нормальный окно выбора файла показано. А также после того, как пользователь выбирает файл, плагин отправляет форму, содержащую файл ввода в iframe. Так что это не настоящий Аякс загрузить, но приносит тот же пользователь опыт.

Поскольку плагин не является верным Ajax и поскольку вы устанавливаете тип контента для application / json, единственным ответом, который вы получите, будет диалог загрузки файла.

Единственный способ (я могу видеть) состоит в том, чтобы удалить тип контента, который вы установили, и в javascript использовать что-то вроде

var jsonObj = eval('(' + response + ')');

Я использовал вышеописанный метод пару дней назад, используя тот же плагин.

0 голосов
/ 30 мая 2010

У меня та же проблема, и я не думаю, что отправка ее другим способом, кроме json, помогает ...

Я думаю, что это связано с методом, с помощью которого содержимое iframe интерпретируется в строку ответа перед его eval () 'редактированием в объект JSON.

представляется, что если возвращаемая сервером строка json_encode () 'содержит HTML с кавычками backwhacked (\ "), то строка, используемая ajaxupload, каким-либо образом экранируется перед вычислением eval, нарушая объект JSON.

Я пока не вижу способа исправить это: (

...