Новое здесь.Я довольно долго искал рабочее решение своей проблемы, но хотя я нашел посты с многообещающими заголовками, ни одно из решений не сработало.
Я развертываю веб-приложение 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