Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Не работает отправка формы jquery + IE9


Автор: system 12.5.2012, 16:20
Здравствуйте, помогите пожалуйста разобраться.  

У меня есть форма : 
Код

<form method="post" action="/balda/server.wsgi" id="gameboard" name="gameboard" >


у нее кнопка submit :
Код

 <input type="submit" name="submit" value="Поиск" style="width:141px;height:50px; float:left; margin-left:4px; font-size:36px;" onmouseover="CheckElements();">

на кнопку submit забиндена обработка ajax отправки:
Код

 jQuery(document).ready(function(){
    jQuery('#gameboard').submit( function() {
        $.ajax({
            url     : $(this).attr('action'),
            type    : $(this).attr('method'),
            dataType: 'json',
            data    : $(this).serialize(),
            success : function( data ) {
                       onAjaxSuccess( data );
                    }
        });
        return false;
    });
});


Есть accepted функция : 
Код

 function onAjaxSuccess( result )


Все это замечательно работает в chrome, ff, opera, safari, но не работает в Internet Explorer 9 (другие не пробовал )

В IE9 переменная result пустая.
Пробовал еще биндить кнопку так:
Код

$('document').ready(function( result )
{
    $('#gameboard').ajaxForm( {    
        type: "POST",
        data    : $(this).serialize(),
        success: onAjaxSuccess,
        dataType: 'json',
        error: function(){ alert ( 'Error loading data format.' ); }
    }); 
});

Но результата такой же кроме IE9 везде работает. 

Подскажите пожалуйста в чем может быть проблема. 
Заранее благодарю за помощь.

Автор: Aliance 12.5.2012, 17:22
Код

<input type="submit" onmouseover="CheckElements();">

Так никто не делает  smile 

Лучше так:
Код

jQuery(function(){
    jQuery('#gameboard').submit( function(evt) {
        evt.preventDefault(); // прерываем сабмит формы

        CheckElements();
        // тут нужно как-то прерывать выполнения в случае ошибки
        // например функция выше должна возвращать boolean, 
        // а далее проверять и либо прекращать, либо продолжать сабмит

        var $this = $(this);

        $.ajax({
            url     : $this.attr('action'),
            type    : $this.attr('method'),
            dataType: 'json',
            data    : $this.serialize(),
            success: onAjaxSuccess
        });
    });
});


Не могу написать точный код, т.к. код функции CheckElements не предоставлен, но смысл указал в комментариях.

Кстати, несколько замечаний:
  • обычно нет смысла передавать name у submit кнопки;
  • в объекте настроек аякс-метода, ключ success принимает callback - либо лямбда-функцию, либо название функции. Нет смысла писать как было у вас, можно проще - как у меня.
  • советую не использовать несколько раз jquery-поиск к одному и тому же элементу. Если такая необходимость есть - проще сохранить результат в переменную, как я это сделал с переменной $this

Автор: system 12.5.2012, 19:04
Большое спасибо за комментарии, только вы не объясните почему не работает в IE9?
Пробовал вызывать по разному, изначально было как вы сказали. 
Но все равно в onAjaxSuccess приходит пустое значение.  

Автор: system 13.5.2012, 22:21
В общем для истории отмечусь, проблема решилась заменой кодировки в json ответе с cp1251 на utf-8
Глупый ие упорно не видит хедер в котором ясно написано (std::cout << "Content-Type: text/html; charset=cp1251" << std::endl << std::endl; ) 
что ответ приходит в кодировке cp1251. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)