Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ajaxSubmit - проблема с получением ответа в success в опера и IE (https://javascript.ru/forum/jquery/36427-ajaxsubmit-problema-s-polucheniem-otveta-v-success-v-opera-i-ie.html)

amelinviacheslav 14.03.2013 20:32

ajaxSubmit - проблема с получением ответа в success в опера и IE
 
Здравствуйте!
Я не самый продвинутый явовщик, но жизнь заставила разбираться.
Проблема у меня одним местом чую элементарная, но за три дня лазанья по инету ничего не понял.

Есть скрипт:
$(function() {var options = {url: 'урл',
type: 'POST',
//dataType: 'text',
data: { данные },
success: function( responseText, statusText, xhr ) {
   alert ('123132132');
);
												error: function(textStatus) {
   alert( textStatus );
},
complete: function() {
   alert( 'complete' );
}
$( form ).ajaxSubmit( options );

за код сильно не бейте - сокращал для форума на вскидку и мог накосячить с правильностью, но не в этом главное.

В целом классический скрипт. В фаерфоксе все работает отлично - приходит ответ, я получаю alert ('123132132');.
а вот в ie8 и опере при получении ответа с сервера появляется окошко загрузки файла (картинка из IE в опере аналогично) и чтоб я не выбрал: открыть сохранить отменить - alert ('123132132'); не наступает.
Ответ - простая строка. dataType попробовал все значения, но не помогло - загрузка файла. А сам загружаемый файл и содержит как раз таки нужную строку (я его сохранял как txt).

Вот и возник вопрос - как сделать так чтоб я получал строку строкой и браузеры не думали что им суют файл на загрузку....
Может найдется добрая душа и направит на путь истинный.:help:

Hoshinokoe 14.03.2013 21:16

amelinviacheslav,

Попробуйте выставить правильный Сontent type на сервере.

amelinviacheslav 14.03.2013 21:24

все бы хорошо, но сервер не мой - и что и как там реализовано неизвестно. сервер - uploads.ru. что и как они посылают....можно только догадываться....

devote 14.03.2013 21:36

Цитата:

Сообщение от amelinviacheslav
можно только догадываться....

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

amelinviacheslav 15.03.2013 07:01

так я же методом научного тыка перебрал все дататайпы и всеравно просит закачку файла. до обработки в success не доходит.
в ответ приходит просто текст! и я его запросто обрабатываю, но меня бесит что он из-за закачки просто не доходит. вот я и в ступоре - как убрать закачку файла и оставить только ответ сервера в обработчике.

danik.js 15.03.2013 08:40

Цитата:

Сообщение от amelinviacheslav
в ответ приходит просто текст

Это не так. Помимо тела ответа, есть еще заголовки, о которых сказал devote
Например Content-Disposition, который если выставлен как attachment, то браузер предложит сохранить файл. Правда как это будет работать в условиях XHR-запроса я не в курсе)

amelinviacheslav 15.03.2013 11:15

Даник, спасибо за ответ!Devote - спасибо за направление поиска!!
Попробую конечно покопаться в этом направлении....
Но получается придется отлаживать на уровне файла jquery.js - т.к. получение ответа с в\сервера приходит где-то там....т.е. если я обрежу все лишние заголовки то должно по идее наступить счастье))) а т.к. используется аякс только 1 раз на этом скрипте то можно безболезненно править оригинал....
Попробую разобраться!! Отладка спасет мир и взломает очень многое!!)))

самое интересное - на самых свежих версиях jquery и jqueryform ответ не приходил в принципе - в опере и ИЕ вообще никакой реакции. по наводке кого то на форуме скачал версии подревнее - jquery 1.6.2 и все заработало без правки скриптов....странно но факт....но это не тема данной ветки а просто информация для размышления.

Ребята, а маленький офтоп - в фаербаге посмотреть ответ могу, но в опере в драконфлае и в ИЕ во встроенном отладчике не знаю куда давить.

danik.js 15.03.2013 12:37

вкладка Сеть (Network) есть везде.

amelinviacheslav 15.03.2013 14:45

Понял. Вечером как только доберусь до проекта попробую.

amelinviacheslav 15.03.2013 21:44

попробовал посмотреть заголовки ответа
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 15 Mar 2013 17:39:56 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 441
Connection: keep-alive
Last-Modified: Fri, 15 Mar 2013 17:39:57GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Access-Control-Allow-Origin: *

{"status_code":200,"status_txt":"OK","data":{"img_name":"89uwf.jpg","img_url":"http:\/\/s2.uploads.ru\/89uwf.jpg","img_view":"http:\/\/uploads.ru\/89uwf.jpg","img_width":"390","img_height":"293","img_attr":"width=\"390\" height=\"293\"","img_size":"27.1 KB","img_bytes":27792,"thumb_url":"http:\/\/s2.uploads.ru\/t\/89uwf.jpg","thumb_width":100,"thumb_height":75,"source":"base64 image string","resized":"1","delete_key":"fed6df71df55f710"}}


как я понял тип данных ответа Content-Type: application/json; charset=UTF-8 и как понимаю application это и есть та бяка изза которой начинается скачивание файла.... В апи сервера нашел как выставить в параметрах запроса тип ожидаемого ответа, но как только тип JSON меняю на другой (txt или xml) опера и ИЕ снова перестают отрабатывать success.
буду пробовать отлаживать jquery.js


Часовой пояс GMT +3, время: 16:41.