Конфликт с кальмаром и аяксом - PullRequest
0 голосов
/ 12 ноября 2008

У меня есть пользователь, который получает сообщение об ошибке ajax на нашем сайте.

Ошибка вставлена ​​ниже.

Они получают ошибку в FF3 Windows, но не IE.

Судя по результатам некоторых поисков, эта проблема часто вызывается клиентским протоколом squid (в конце ошибки вы заметите, упоминается squid).

Мой код ajax такой же, как здесь: http://www.w3schools.com/Ajax/ajax_browsers.asp

Есть идеи?

ERROR

The requested URL could not be retrieved

While trying to process the request:

POST /library/cart/cart_ajax.php?action=refreshCartWidget&qty=dontuse& HTTP/1.1
Host: mydomain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: identity,gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300

Connection: Close
Referer: http://mydomain.com/library

Pragma: no-cache
Cache-Control: no-cache

The following error was encountered:

Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:

Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed
Your cache administrator is webmaster. 
Generated Wed, 12 Nov 2008 09:28:58 GMT by ipwal3.osi-tech.com (squid/2.6.STABLE17)

Ответы [ 3 ]

2 голосов
/ 12 ноября 2008

Экономьте время и используйте jQuery . У него есть абстракция для ajax, которая работает во всех браузерах, а не только в Internet Explorer и, возможно, в FF. ;-) Я предполагаю, что код там старый и долго не обновлялся.

Простой вызов ajax в jQuery выглядит следующим образом:

$.post(
  '/the/url/to/post/to',
  { some: data },
  function(data) { alert(data); }
);

Также помогает, если вы понимаете основы HTTP - например, методы запроса (PUT, POST, GET, DELETE, HEAD) и так далее. Вставленная вами ошибка означает, что заголовок Content-Length отсутствует в вашем запросе, и большинство серверов (если не все) ожидают его отправки при вводе PUT или POST, поскольку предполагается, что они "изменяют данные" ( например, создать, обновить).

Может быть, IE добавляет заголовок для вас, но Firefox, очевидно, этого не делает.

JQuery позаботится обо всем этом. ;)

1 голос
/ 12 ноября 2008

Вы можете использовать .setRequestHeader () на вашем XHR-объекте, чтобы установить длину содержимого, если FF не сделает это за вас.

Поскольку вы публикуете свои данные в методе .send (content), просто добавьте перед ним заголовок с content.length.

0 голосов
/ 12 ноября 2008

Вы должны сесть вместе со своим пользователем и поставить между собой инструмент трассировки HTTP Fiddler . Тогда вы можете легко сравнить запрос, отправляемый IE и FF3.

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

...