Страница 1 из 2

JQuery и firefox

СообщениеДобавлено: 29 сен 2009, 23:31
Виктор
Вобщем расчитываю на вашу помощь:
имеется форма
Код: Выделить всё
<form action="index.php" method="post" id="josForm" name="josForm">
 <button type="submit">Отправить</button>
</form>

<script>
   jQuery(document).ready(function(){      
      jQuery('#josForm').submit( function(){
         var entry= true;
         jQuery.getJSON('index.php?task=proverka', { userEntry: entry},
         function(json) {      
            var check =json.note.entry;
            if (check)
               josForm.submit();            
         });         
         return false;
      });      
   });      
</script>

Смысл скрипта в том что происходить проверка с применением Ajax данных и возвращается результат, если положительный то отправляется форма
Так вот этот скрипт работает в Опере и в IE, а в Firefox форма не отправляется на сервер: josForm.submit(); не хочет выполняться.
в чем может быть проблема и как от нее избавиться?

Re: JQuery и firefox

СообщениеДобавлено: 30 сен 2009, 12:15
Алекснадр
Виктор писал(а):Вобщем расчитываю на вашу помощь:
имеется форма
<form action="index.php" method="post" id="josForm" name="josForm">
<button type="submit">Отправить</button>
</form>

<script>
jQuery(document).ready(function(){
jQuery('#josForm').submit( function(){
var entry= true;
jQuery.getJSON('index.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.note.entry;
if (check)
josForm.submit();
});
return false;
});
});
</script>
Смысл скрипта в том что происходить проверка с применением Ajax данных и возвращается результат, если положительный то отправляется форма
Так вот этот скрипт работает в Опере и в IE, а в Firefox форма не отправляется на сервер: josForm.submit(); не хочет выполняться.
в чем может быть проблема и как от нее избавиться?


Вы неверно используете josForm.submit(); Поскольку josForm является элементом DOM, к элементам в jquery можно обращаться так $("#josForm").submit(); или так josForm = $("#josForm");, а потом josForm.submit();
В общем рабочий код ниже.
Код: Выделить всё
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<form action="index.php" method="post" id="josForm" name="josForm">
<button type="submit">Отправить</button>
</form>

<script>
jQuery(document).ready(function(){
jQuery('button[type=submit]').click(function(){ //Ваша ошибка исправлена так как в FF вызывала бесконечный цикл
var entry= true;
jQuery.getJSON('test.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.name;
if (check)
$("#josForm").submit(); //Ваша ошибка исправлена смотрите http://slyweb.ru/jquerydoc/id.php
});
return false;
});
});
</script>

При условии что test.php будет таким
Код: Выделить всё
<?php
header("Content-type: text/html; charset=UTF-8");
echo json_encode(array('name'=>'name'));
?>

Проверки нет, но для объяснения сгодится. ;)

Re: JQuery и firefox

СообщениеДобавлено: 30 сен 2009, 16:29
Виктор
Спасибо. Теперь совсем другое дело.

Re: JQuery и firefox

СообщениеДобавлено: 01 окт 2009, 15:24
rudolf
Предыдущий вопрос решился и возник новый:
как можно перегрузить функцию, в которой помещен jQuery.getJSON значением, которое возвращает функция?
function result(){
var entry= true;
jQuery.getJSON('index.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.note.entry;
if (check) // то функция result() должна возвратить true
});
return false;
}

Получается так, что функция не дожидается выполнения скрипта на сервере, и вообще getJSON я как понял не выполняется пока result()- не завершится(если вставить alert(); перед return false; сценарий останавливается ).

Re: JQuery и firefox

СообщениеДобавлено: 01 окт 2009, 18:59
admin
Правильно так:
Код: Выделить всё
jQuery(document).ready(function(){
jQuery('button[type=submit]').click(function(){

function result()
{
var entry= true;
jQuery.getJSON('test.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.name;
if (check){ // если правильно то отправляем
$("#josForm").submit();
}
else // иначе
{
return false;
}
});
}
result(); // Вызывайте функцию до отправки формы, а не после, иначе - как у Вас, функция не успевает быть выполнена.
return false; // Не забывайте прекращать всплывание события submit.
});
});

Ваша ошибка - Функция не успеет выполнится так как отправка формы исполняется раньше.
Код: Выделить всё
function result(){
var entry= true;
jQuery.getJSON('index.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.note.entry;
if (check) // то функция result() должна возвратить true
});
return false;
}

Нужно так
Код: Выделить всё
jQuery(document).ready(function(){
jQuery('button[type=submit]').click(function(){ //Ваша ошибка исправлена так как в FF вызывала бесконечный цикл

function result(){
var entry= true;
jQuery.getJSON('test.php?task=proverka', { userEntry: entry},
function(json) {
var check =json.name;
if (check) // то функция result() должна возвратить true
alert(check);
});
return false;
}
result()
return false;
});
});

Re: JQuery и firefox

СообщениеДобавлено: 01 окт 2009, 20:18
rudolf
Я наверное неправильно задал вопрос...
вообщем вот скрипт
Код: Выделить всё
<input type="button" id="button" value="отправить">
<body>

<script type="text/javascript">
jQuery(document).ready(function(){
   
   jQuery('#button').click(function(){
   var name='Пусто';
   function result(){
      var entry= true;
      
      jQuery.getJSON('example.php', { name:'Ура получилось'},
      function(json){
         name=json.note.name;
         jQuery('#example-4').html('');
         jQuery('#example-4').append(json.note.name);
      });   
      return false;
   }
   result();
   alert (name);// как зделать так, что бы здесь вывести name из getJSON
   });
});
</script>   
        <div class="example cursor" id="example-4"></div>
</body>
</html>


example.php:
Код: Выделить всё
{
   note:{
      name:'<?php echo $_GET['name']; ?>'
   }
}


как в alert (name); вывести значение полученное из getJSON.

Re: JQuery и firefox

СообщениеДобавлено: 02 окт 2009, 02:10
admin
У меня так получилось. По другому можно, но много писать нужно.
Код: Выделить всё
    jQuery(document).ready(function(){
       
       jQuery('#button').click(function(){
       var name='Пусто';
       function result(){
          var entry= true;
         
          jQuery.getJSON('test.php', { name:'Ура получилось'},
          function(json){
             name=json.note.name;
             jQuery('#example-4').html('');
             jQuery('#example-4').append(json.note.name);
             alert (name);// перенесите alert в область видимости функции
          });   
          return false;
       }
       result();
     
       });
    });

Re: JQuery и firefox

СообщениеДобавлено: 02 окт 2009, 03:21
rudolf
в том то и дело, что так не получится...
дело в том что встраиваю функцию уже в готовый скрипт, и функция в которую встроен код должна вернуть значение, которое зависит что вернет getJSON

Re: JQuery и firefox

СообщениеДобавлено: 02 окт 2009, 14:16
admin
Думаю это не плохой вариант.
Код: Выделить всё
 jQuery(document).ready(function(){
       
       jQuery('#button').click(function(){
       var name='Пусто';
  function result(){
          var entry= true;
         
   var rand = $.ajax({type: "Get", url: "test.php", data: "name=Ура получилось", async: false }).responseText;
        jQuery('#example-4').html('');
             jQuery('#example-4').append(rand);
          return rand;
       }
     var name = result();
     alert (name);
       });
    });



Код php
Код: Выделить всё
<?php echo $_GET['name']; ?>

Re: JQuery и firefox

СообщениеДобавлено: 02 окт 2009, 18:38
rudolf
Этот код работает. Спасибо.
Хорошо что вы создали форум по JQuery. Думаю будет востребован. :D