#php #jquery #ajax #forms #internet-explorer
#php #jquery #ajax #формы #internet-explorer
Вопрос:
У меня есть форма и фрагмент javascript
кода для создания AJAX
форм. Странно то, что когда я отправляю свою форму в Internet Explorer, отображается только [object Object]
. Форма отлично работает в Google Chrome. Вот мой код:
Заголовок формы:
<form id="page-details-form" class="ajax-form" name="page-details-form" method="POST" action="/pages/save/1">
Прослушиватель Javascript:
<script>
$(function(){
$(document).on("submit",".ajax-form",function(e){
if (window.event) {
window.event.returnValue = false;
}
e.preventDefault ? e.preventDefault() : e.returnValue = false;
$('.form-message').remove();
if($('#onSubmitJsEval').html() amp;amp; $('#onSubmitJsEval').html().length > 0)
{
eval($('#onSubmitJsEval').html());
}
var submitBtnValue = $('#submitBtn').html();
var formId = $(this).attr('id');
var postData = $(this).serializeArray();
$('#submitBtn') .html('<img src="images/ajax-loader.gif" />');
$('p.has-error') .remove();
$('div.has-error') .removeClass('has-error');
$.post($(this).attr('action'), postData, function(jsonResponse)
{
var jsonObject = jQuery.parseJSON(jsonResponse);
if(jsonObject.success == true)
{
$('<div class="<?=MESSAGE_SUCCESS_CLASS?>"><?=MESSAGE_SUCCESS_PREFIX?>' jsonObject.message '</div>' ).insertBefore( "#" formId " h2" );
if(jsonObject.insertedId > 0)
{
var stringPath = window.location.pathname.substr(window.location.pathname.length - 1);
document.location.href = window.location.pathname ((stringPath != "/") ? "/" : "") jsonObject.insertedId;
}
}
else
{
$('<div class="<?=MESSAGE_ERROR_CLASS?>"><?=MESSAGE_ERROR_PREFIX?>' jsonObject.message '</div>' ).insertBefore( "#" formId " h2" );
$.each(jsonObject.errors, function(index, value){
$('[name=' index ']').parent().addClass('has-error');
$('[name=' index ']').after('<p class="has-error help-block">' value '</p>');
})
}
$('#submitBtn').html(submitBtnValue);
});
});
});
</script>
Я попробовал несколько вариантов, помимо текущего варианта:
if (e.preventDefault) e.preventDefault();
e.returnValue = false
e.returnValue = false
послеe.preventDefault
У кого-нибудь есть идея? Если мне нужно опубликовать больше кода, пожалуйста, дайте мне знать. Я могу опубликовать весь код, если вы хотите.
Большое спасибо!
Комментарии:
1.
e.returnValue = false;;
двойные точки с запятой?? и почему бы вам просто не попробовать сe.preventDefault();
? зачем вам для этого нужно условие if?2. Извините, я просто неправильно вставил код. Я обновляю его, используя полный код javascript.
3. Вы пробовали простое
return false;
?4. Похоже,
e.preventDefault ? e.preventDefault() : e.returnValue = false;
это работает для предотвращения по умолчанию, потому что оно не перенаправляет на SITE / save / details / 1, но вместо этого отображает[object Object]
Ответ №1:
Вам понадобится комбинация e.preventDefault() и return false с промежуточным кодом обработки.
$(document).on("submit", ".ajax-form", function(e) {
e.preventDefault();
//Do your stuff here
return false;
});
Комментарии:
1. Это все еще не работает. Я добавил
return false
добавить конец иe.preventDefault();
в качестве первого правила. Но результат теперь другой. Internet Explorer теперь печатает ответ JSON вместо[object Object]
. Таким образом, это предполагает, что он просто отправляет форму, потому что она переходит на САЙТ / страницы / сохранить / 1.2. Похоже,
e.preventDefault ? e.preventDefault() : e.returnValue = false;
это работает для предотвращения по умолчанию, потому что оно не перенаправляет на SITE / save / details / 1, но вместо этого оно отображает[object Object]
. Итак, когда я отправляю форму, отображается Internet Explorer[object Object]
, но мне просто нужно выполнить вызов AJAX и действие после вызова AJAX. Конкретный вопрос заключается в том, почему Internet Explorer показывает это сообщение вместо того, чтобы ничего не делать с текущим окном?3. Почему бы не использовать стандартную функцию jQuery getJSON ( api.jquery.com/jquery.getjson ) для загрузки данных в формате JSON? Или взгляните на api.jquery.com/jquery.ajax Я хочу сказать, что jQuery обеспечивает хорошую совместимость между большинством браузеров.
4. Пример приведенного выше стандартного вызова ajax для загрузки данных JSON: $.ajax({ type: ‘GET’, url: ‘get.php ‘, данные: { // переменные}, тип содержимого: ‘application / json; кодировка=utf-8’, тип данных: ‘json’, успех: функция (данные) { //обработка}, ошибка: функция() { // обработка ошибок } });