JQuery ajax вызывает обновление полной страницы в FireFox
Я делаю ajax-вызов с jQuery. Вызов ajax отлично работает в IE 7, но FireFox 3 всегда выполняет обновление полной страницы при выполнении этого вызова. Ajax-вызов - POSTing для метода страницы ASP.NET.
Есть ли проблема в jQuery или мне просто не хватает какой-либо настройки?
$.ajax({
async: false,
type: "POST",
url: "Default.aspx/DoSomething",
data: "{" + parms + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function(data) { succesfulPost(data); },
error: function(XMLHttpRequest, textStatus, errorThrown) { errorPost(textStatus, errorThrown); }
});
Вызов выполняется из кнопки onclick кнопки html. Я попробовал "вернуть ложь"; в методе, который делает этот вызов ajax, но полное обновление в FireFox продолжается.
Я попытался установить async = true, но это не работает. FireFox просто продолжает работать и не ждет, пока бэкэнд не вернет ответ. FireFox (в js) фактически генерирует ошибку в вызове ajax. Как вы можете видеть выше, функция ошибки определена, и это срабатывает, когда я устанавливаю async = true.
Ответы
Ответ 1
return false - это то, что вам нужно, однако, если ошибка javascript возникает до того, как вы нажмете эту строку, браузер продолжит успешное выполнение щелчка мышью или нажатием кнопки.
вы можете попробовать попытаться объединить потенциальные проблемные области с помощью блоков try/catch.
В качестве альтернативы вы можете попробовать следующее:
e.preventDefault
как первый оператор в вашем обработчике. Это должно прекратить событие по умолчанию, и я думаю, что вы можете позвонить этому фронту... Я просто не пробовал.
Изменить: я также хотел бы добавить, что ошибка ajax: обработчик только ловут ошибки, которые поступают с сервера... например, 403 или 500. Вы все равно должны поместить вызов ajax в try/catch.
Ответ 2
Как вы ссылаетесь на метод AJAX? Это может быть так же просто, как отменить событие, которое инициирует запрос AJAX, если оно также вызовет представление в форме.
<input type="submit" onclick="doAjaxSubmit();return false;" value="Update" />
Добавление "return false"; приведет к тому, что типичное действие отправки будет отменено. Если это происходит из текстового поля, вам нужно добавить e.preventDefault к обработчику обработчика нажатия клавиш (или любого другого), который настроен для создания AJAX.
Ответ 3
Кроме того, если ваш вход type = "submit"... вы можете изменить его на type = "button". Тогда он не пытается отправить форму... только делая ваше событие "click".
Ответ 4
Является ли этот вызов внутри события click? Если это так, убедитесь, что в конце события click есть "return false". Просто мысль. Я знаю эту довольно старую шляпу, но, я думал, что все равно буду упоминать ее.
В противном случае ваш вызов выглядит отлично от того, что я могу сказать.
Ответ 5
У меня была аналогичная проблема с Firefox с использованием Ajax. У меня было несколько элементов ввода в теге формы. Тем не менее, тег формы заставлял страницу обновляться, даже если вместо этого я заменил тег тегом. Я заменил тег формы на div, и проблема исчезла.
Я также попробовал e.preventDefault(), как упоминалось выше. Это также решило проблему, позволяя мне продолжать использовать тег формы.