Пустой JSON в ответе getJSON от IIS6, а не IIS7? Использование MVC2, jQuery, Ajax - PullRequest
0 голосов
/ 18 февраля 2011

Новое здесь.Я довольно долго искал рабочее решение своей проблемы, но хотя я нашел посты с многообещающими заголовками, ни одно из решений не сработало.

Я развертываю веб-приложение MVC2 на клиентском сервере.,

Я занимался разработкой на Win2k8 Server, но они работают под управлением Win2k3 sever.

Единственная цель приложения - получить некоторую информацию об идентификаторе записи в качестве параметров HTTP, проверить в базе данных состояние данной записи или записей, а затем вернуть информацию о состоянии в виде простой строки, такой как «Завершено»или «Incomplete» в формате JSON.

Этот код getJSON отлично работает в среде разработки.

Мне, к сожалению, на сервере клиента запрос getJSON получает нулевой ответ от приложения.

Не существует междоменного действия AFAIK ... результат тот же с сервера клиента или с моей машины через VPN.

В коде Json модели MVC общее решение длялюди должны добавить атрибут "JsonRequestBehavior.AllowGet" к возвращаемому результату Json.Я сделал это задолго до того, как попытался развернуть его, и, как я уже сказал, он отлично работал в среде dev.

Используя Firebug, я наблюдал, как один и тот же URL-адрес запроса отправлялся как на мой локальный сервер, так и на клиентserver - заголовки ответа от обоих серверов одинаковы, но содержимое ответа от моего сервера отображается как:

{"Result":"No Data"}

Что я и хочу.

Буквально не отображается содержимоев ответе с сервера клиента ..?Но запрос получает код HTTP 200 и записывается как успешный в атрибуте состояния ответа.

Тип содержимого заголовка ответа в обеих ситуациях - "application / json"

Но подождите, тамбольше!

Если я вручную ввожу запрос на каждый сервер в навигационной панели Firefox и нажимаю клавишу ввода, в обоих случаях он отвечает:

{"Result":"No Data"}

Что я и хочу.Так почему я могу получить желаемый результат из приложения MVC на сервере клиента только , когда я вручную ввожу URL запроса в Firefox, но не из кода Javascript?

У меня естьпопытался форсировать различные типы содержимого вывода ... с помощью метода jQuery ajaxSetup ...

$.ajaxSetup({
    async: false,
    dataType: 'text'
    }); 

или

$.ajaxSetup({
    async: false,
    dataType: 'html'
    }); 

и снова с использованием "script" и "json".Я также попробовал варианты преобразования, такие как «text json» или «html json» или «json text» и т. Д.

Некоторые из постов, которые я читаю, и мое внутреннее чувство, тем не менее, предполагаютпроблема не в том, что код jQuery делает ошибочный запрос ... Я не вижу, как один и тот же запрос jQuery указывает на другой сервер, на котором запущено одно и то же приложение, внезапно заставило бы этот сервер отправить обратно нулевое значение.

По нулю, хочу прояснить ... я имею ввиду ничего не отправлено.Там нет {} или {null} или каких-либо признаков JSON ... просто пустая белизна несуществования: P

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

Если проблема заключается в сервере, то трудно понять, что MVC работает на 100% на сервере IIS6, но в целомэто похоже на работу.У меня на клиентском сервере работает другое приложение MVC, которое отвечает на виртуальные пути и обычно работает так же, как на компьютере разработчика.

Я обнаружил одну вещь ... заголовки запроса несколько отличаются?Заголовки запросов, отправляемые в настройку IIS7, включают в себя поле / значение «X-Requested-With: XMLHttpRequest», «referrer» и «cookie».

Можно предположить, что отсутствие «X-запрашиваемого»-with: XMLHttpRequest "в заголовках запросов IIS6 является подсказкой, но я не вижу тогда, как один и тот же код JavaScript, указывающий на другой сервер, может сам генерировать разные заголовки запросов.Так как еще эти генерируются?

Javascript встроен в страницу ASP.NET, кстати.

Оооо .. разочарование!

Спасибо за любой вклад.


Нечетный прогресс ... очевидно, есть какая-то проблема с IIS6, обрабатывающим запрос. Хотя я не обращал никакого внимания на JSONP, пост в другом месте предлагал иногда использовать "& callback =?" Параметр в конце URL-адреса запроса .getJSON переведет его в режим GET, и это часто работает при проблемах с получением данных с сервера. Так что я сделал это ... и это сработало, вроде как. Правильное {"Result": "No Data"} было возвращено в ответ на запрос ... что кажется хорошим. Однако, как работает обратный вызов JSONP, он генерирует свой собственный скрипт для вызова, выборки и интерпретации входящего JSON. В этом случае он интерпретирует JSON как метку, которой у него нет, поэтому выдается ошибка «недопустимая метка» ... должен быть какой-то способ взломать вещи, чтобы просто доставить JSON, но все необходимое использование Обратные вызовы JSONP предполагают, что конфигурация сервера неверна, верно? Или почему он работает без JSONP для IIS7, а не IIS6?


Несмотря на то, что мне не нравится решение JSONP с обратным вызовом, оно работает нормально. По-прежнему возвращается ошибка о недопустимой метке, но это не мешает запуску оставшегося javascript ... и теперь приложение работает с IIS6. Я еще не тестировал исправление использования обратных вызовов и JSONP для IIS7, но я ожидаю, что оно будет работать достаточно хорошо.


Вот ссылка на обсуждение, которое привело меня к моему текущему решению. Однако я все же надеюсь найти более элегантное решение.

NeoWin.net

1 Ответ

0 голосов
/ 18 февраля 2011

Вы уверены, что ваши сопоставления расширений приложений настроены правильно?

Следуйте этой статье для запуска MVC2 на IIS6 и убедитесь, что все различные конфигурации выполнены, это, вероятно, перваяшаг, прежде чем идти дальше и исследовать особенности.

Я действительно склонен полагать, что это связано с HTTP-глаголами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...