form.submit и WCF
Что-то ExtJS всё больше печалит в качестве выбранного фреймворка. Вероятно, я не умею его готовить. ОК.
Создал простую форму: Комбобокс, Файл и Сабмит-кнопка. var form = this.lookupReference('myform').getForm(); if (form.isValid()) { form.submit({ url: '/Services/Service.svc/Upload', success: function (form, action) { debugger; }, failure: function (form, action) { debugger; } }); } От сервера приходит КОРРЕКТНЫЙ ответ. 200 и нужный JSON. Но! 1. Хром 48.0.2564. В процессе обработки выдаёт: Resource interpreted as Document but transferred with MIME type application/json: "https://sdsdw.com/Services/Service.svc/Upload При этом в заголовках отправленных данных я чётко вижу: Content-Type: multipart/form-data; boundary=----WebKitFormBoundarylABtsdmuqaDjyzUd В итоге заходит в блок failure, где я вижу корректный ответ от веб-сервиса: action.response Object {responseText: "{"FileLength":9426,"FilePath":"BlaBla"}", responseXML: document, status: 200} 2. ИЕ11 Если с Хромом ещё как-то можно жить, то здесь всё ещё более печально. В процессе загрузки формы: SCRIPT5007: Не удалось получить свойство "keys" ссылки, значение которой не определено или является NULL Файл: bootstrap.js, строка: 105, столбец: 9 После сабмита: SCRIPT65535: Недопустимый вызывающий объект Файл: javascript:<URI>, строка: 1, столбец: 1 Не заходит ни в блок Саксесс, ни в Фэил, а просто тупо предлагает мне скачать json-файл, в котором, опять же, корректные данные от сервера. Я даже не знаю, господа... Если ещё какие сведения нужны для валидации проблемы, постараюсь предоставить. А особенно грустно, что гугление по проблемам\кейсам ExtJS в 90% случаев выдаёт в основном какие-то плесневелые ответы с их сапорт-форума, датированные прошлым десятилетием. |
Сложно сказать вот так наугад, но проверьте еще заголовок Content-type в ответе сервера. Что там?
|
Вот заголовок ответа:
HTTP/1.1 200 OK Cache-Control: private Transfer-Encoding: chunked Content-Type: application/json; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 Persistent-Auth: true X-Powered-By: ASP.NET Date: Mon, 22 Feb 2016 14:52:00 GMT Вот реализация интерфейса на сервере: [OperationContract(Name = "Upload")] [DataContractFormat] [WebInvoke(Method = "POST", UriTemplate = "Upload", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] UploadedFile Upload(Stream uploading); Тут стоит отметить, что в процессе я пробовал реализацию через FormData() и XHR - особых проблем не заметил. Что не нравится ExtJS - не пойму. Может ему каких-то своих библиотек не хватает? |
Все же сильно кажется что в ответе проблема... Можете пару скриншотов сделать? В девелоперской консоли хрома выделите проблемный запрос и сделайте снимки вкладок headers, preview, response
|
|
Вычислил проблему. Тут не в эксте дело, а в браузерных заморочках. Заставьте сервер возвращать Content-Type: text/html и все пройдет, надеюсь.
Кстати спасибо за пост, у себя нашел точно такую же проблему и пофиксал ) |
Фуф! Мдеее... С Экстом точно не соскучишься. :blink:
Infarch, В общем ваша рекомендация помогла. Большое спасибо. Неистово плюсую в карму! Но оно упорно заходило в фэил. Оказывается, это фича! Решение нашлось тут. Это из-за того, что у меня форма с файловым полем. |
А, success отсутствовал? Да, я забыл про него ) У меня все ответы в JSON получают его автоматически.
Насчет "не соскучишься" соглясен. Но в пределах разумного все же. success это документированная фишка, а вот поведение браузера при контент-тайпе отличном от текста это уже не к Сенче вопрос. Надо понимать что при аплоаде файлов фреймворк делает множество неявных вещей чтоб симулировать ажакс-запрос: создает скрытый iframe, сабмитает форму через него, ну и прочие интересные вещи. |
Часовой пояс GMT +3, время: 07:14. |