Ajax jquery, работает в IE, полностью не работает в Firefox - PullRequest
1 голос
/ 04 июня 2010

Этот фрагмент javascript всегда возвращает ноль в Firefox и Chrome, но отлично работает в Internet Explorer:

  $.ajax({
    url: "http://mymachine/mywebservice.asmx/myfunction",
    data: "{ 'q': 'hotels', 'limit': '10' }",
    dataType: "json",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataFilter: function (data) { return data; },
    success: function (data) {
        alert(data == null);
    }
  });

Глядя в fiddler, запрос IE выглядит следующим образом :

POST http://remotemachine/webservice.asmx/functionname HTTP/1.1
Content-Type: application/json; charset=utf-8
Accept-Language: en-gb
Referer: http://localmachine/
Accept: application/json, text/javascript, */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET4.0C; .NET4.0E)
Host: test.maznet.biz
Content-Length: 32
Connection: Keep-Alive
Pragma: no-cache

{ 'q': 'hotels', 'limit': '10' }

Запрос Firefox, , выполняющий точно такой же JavaScript, выглядит следующим образом:

OPTIONS http://remotemachine/webservice.asmx/functionname HTTP/1.1
Host: remotehost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://mymachine
Access-Control-Request-Method: POST

Редактировать: я исправил точные имена функций и домены для анонимности, так что простите за любые опечатки

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

О, пять часов работы над этим, я только что нашел ответ. Firefox / Chrome не разрешает междоменные запросы JSON, поэтому он работает в старой доброй слабой безопасности IE8, а не в более «безопасных» браузерах. Doh!

0 голосов
/ 04 июня 2010

Попробуйте перейти по URL, который вы запрашиваете через ajax напрямую. Получите полный URL-адрес запроса (из FireBug в Firefox) и запустите его там, чтобы увидеть, что Firefox возвращает. Тогда вы можете попробовать то же самое в IE через Fiddler. Если URL-адреса отличаются в любом случае, вы сможете увидеть, что ошибка довольно быстро. Если они совпадают, загрузка URL в каждом браузере должна показать различия в результатах.

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