2014-09-30 3 views
0

Я использую JQuery DataTable. А с помощью решений AJAX вызовов (Междоменное Request), как это, чтобы получить данные:Невозможно установить тип содержимого в заголовок запроса ajax в IE 8 во время запроса POST

ajax: { 
    url: url, 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8' 
    } 

Это как заголовок выглядит для этого запроса в IE 8

Key Value 
Request POST /api/data HTTP/1.1 
Accept */* 
Origin http://localhost:5000 
Accept-Language en-US 
Accept-Encoding gzip, deflate 
User-Agent Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0) 
Host localhost:5555 
Content-Length 3647 
DNT 1 
Connection Keep-Alive 
Cache-Control no-cache 

JQuery DataTable автоматически отправляет контент на сервер. Но , когда запрос отправляется через IE 8, сервер не получает никаких данных в HttpContext.Current.Request.Form объект. Я использую ниже код для чтения данных, отправленных сервером.

  var formData = HttpContext.Current.Request.Form; 
      var direction = formData["order[0][dir]"]; 
      var draw = Convert.ToInt32(formData["draw"]); 
      var length = Convert.ToInt32(formData["length"]); 
      var start = Convert.ToInt32(formData["start"]); 

Если я отправляю запрос через хром или FireFox, я получаю данные на сервере. Когда запрос проходит через заголовок типа содержимого IE 8, не установлен. Я думаю, что это причина, по которой данные недоступны на стороне сервера. Пожалуйста, помогите !!

ответ

0

Вы устанавливаете dataType вместо contentType. В соответствии с jQuery docs вам необходимо использовать contentType при настройке того, что отправляет браузер, и dataType при указании того, что браузер ожидает получить.

CONTENTTYPE (по умолчанию: 'применение/х-WWW-форм-urlencoded; кодировка = UTF-8')

Тип: String

При передаче данных на сервер, использовать этот контент тип. По умолчанию «application/x-www-form-urlencoded; charset = UTF-8», что отлично подходит для в большинстве случаев. Если вы явно передаете контент-тип в $ .ajax(), то он всегда отправляется на сервер (даже если данные не отправляются). Спецификация XMLHttpRequest W3C указывает, что кодировка всегда UTF-8; указание другой кодировки не заставит браузер менять кодировку. Примечание. Для междоменных запросов установка содержимого типа для чего-либо, кроме приложения/x-www-form-urlencoded, multipart/form-data или text/plain приведет к тому, что браузер отправит запрос OPTIONS preflight сервер.

+0

Спасибо за ответ. Я также пробовал настройку contentType, но похоже, что IE 8 не отправляет эту информацию. Проверьте этот пункт ссылки нет 4. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – SharpCoder

+0

Является ли это перекрестным доменом? – RichieAHB

+0

да это запрос перекрестного домена – SharpCoder

0

Чтобы ответить на мой собственный вопрос, на стороне сервера, я сейчас читает данные формы, как это:

var formData = HttpUtility.ParseQueryString(await Request.Content.ReadAsStringAsync()); 

раньше я пытался читать данные, как это: var formData = HttpContext.Current.Request.Form;

As упомянутый в this link, пункт 4, IE 8 не отправляет contentType в заголовок запроса. И ссылка также говорит о ручном чтении тела запроса, что я и делаю сейчас.

Смежные вопросы