не срабатывает на второй раз ajax[отправка формы]
Здравствуйте!
Такой вопрос: написал программу, которая имитирует систему проверки знаний: на страничке текст вопроса и несколько вариантов ответа. пытаюсь с помощью аякса(POST запрос) отправлять в фоне данные формы(выбранный ответ) Нажимаю кнопку Submit и данные уходят на сервер. Там они обрабатываются и приходит текст следующего вопроса и варианты ответа. Выбираю ответ и нажимаю Submit - данные уходят уже не через аякс - отправка происходит обычным GET_ом и страничка перегружается(обновляется так как обработка происходит кодом, который на этой же странице). После этого GET_а и вызванного им перегрузки(обновления) страницы аякс снова срабатывает при отправке очередного ответа на вопрос. Если после первого срабатывания аякса обновить страницу - аякс сработает и второй раз. Это дает повод предположить, что проблема в "видимости " скрипта? После того как пришел ответ с сервера, я этот ответ показываю в определенном DIV_е и все, что оказывается за пределами этого DIV_а становится недоступным? Подскажите пожалуйста, что нужно сделать, чтобы результаты постоянно отправлялись аяксом? Где я не прав? вот кусочки кода: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script type="text/javascript" src="javascript/jquery.js"></script> <script type="text/javascript" src="javascript/func.js"></script> <title>Система проверки знаний</title> </head> <script type="text/javascript"> $(document).ready(function(){ $('#myForm').submit(function(){ $.ajax({ type: "POST", url: "test.htm", data: "answers="+idr, success: function(html){ $("#content").html(html); alert("ajax!"); } }); return false; }); }); var idr = 0; </script> <body > <div id="content"> <div id="nifty"> <form id="myForm" name="testForm"> <center> <table cellpadding=4 cellspacing=2 border=0> <tr> <td class="question" colspan="2">${questionList.question}</td> </tr> <c:forEach items="${answerSet}" var="answer" varStatus="status"> <tr > <td width="20"> <input type="radio" name="answers" value="${answer.id}" checked onClick="if(this.checked) {idr=value;}"></td> <td> <label>${answer.answer}</label> </td> </tr> </c:forEach> <tr> <td colspan="2" align=center><input type="submit" id="subm" value="Дальше"></td> </tr> </table> </center> </form> </div> </div> </body> </html> |
А почему не
$("#myForm").submit(function() { $(this).ajaxSubmit({/*обработчик*/}); }); Сформируйте обычную форму которая по-средствам выше написанного скрипта будет отправляться специально подготовленному php скрипту на сервере. Который в свою очередь любым вам удобным форматом вернет результат. (например мне кажется тут JSON подойдет) |
2MadGest
Я не очень силен в jQuery. Насколько я понял Ваш вариант решения моей проблемы предполагает использование плагина jQuery Form Plugin? Я сделал вот так: $('#myForm').live('submit', function(){ ..... после этих действий все данные отправляются аяксом! Но возникла следующая проблема: добавил ещё таймер(в отдельном div'е обратный отсчет) и кнопочку, нажав на которую этот div с убывающими числами красиво "уплывают". Но когда нажимаю на кнопочку "Дальше", появляется новый вопрос, новые ответы -- так и должно быть + НОВАЯ кнопочка "Таймер" - почему она появляется? Если нажать на F5 - "лишняя кнопочка Таймер" исчезает. Ведь в обработчике я по сути загружаю новые данные только в <div id="content"> Ссылку не могу дать, так как сижу на диалАп ( Код : <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script type="text/javascript" src="javascript/jquery.js"></script> <script type="text/javascript" src="javascript/func.js"></script> <title>Система проверки знаний</title> </head> <script type="text/javascript"> $(function() { $("#timer_btn").click(function(event) { event.preventDefault(); $("#div1").slideToggle(); }); }); $(document).ready(function(){ $('#myForm').live('submit', function(){ var idr = getCheckedValue(document.forms['testForm'].elements['answers']); $.ajax({ type: "POST", url: "test.htm", data: "answers="+idr, success: function(html){ $("#content").html(html); } }); return false; }); }); </script> <body > <div id="div_timer_btn"> <input type="button" id="timer_btn" value="Таймер"> </div> <div id="div1"> <span id="span"></span> </div> <div id="content"> <div id="nifty"> <form id="myForm" name="testForm"> <center> <table cellpadding=4 cellspacing=2 border=0> <tr> <td class="question" colspan="2">${questionList.question}</td> </tr> <c:forEach items="${answerSet}" var="answer" varStatus="status"> <tr > <td width="20"> <input type="radio" name="answers" value="${answer.id}" checked "></td> <td> <label>${answer.answer}</label> </td> </tr> </c:forEach> <tr> <td colspan="2" align=center><input type="submit" id="subm" value="Дальше"></td> </tr> </table> </center> </form> </div> </div> <script> <!-- // var milisec=0 var seconds=60 function display(){ if (milisec<=0){ milisec=9 seconds-=1 } if (seconds<=-1){ milisec=0 seconds+=1 gg() } else milisec-=1 ; document.getElementById('span').innerHTML=seconds; setTimeout("display();",100) } display() --> </script> </body> </html> поэтому вот картинки: До: ![]() После ответа на вопрос: ![]() |
А когда жмете дальше происходит полная перегрузка страницы?
|
нет, не перезагружается.
когда нажимаю дальше срабатывает ajax. данные в фоне отправляются серверу, приходят от сервера и попадают в <div id="content"> а также появляется эта мнимая вторая кнопочка Таймер. если теперь перегрузить страницу (F5) то мнимая кнопка исчезает. |
Предлагаю изучить то что возвращает php возможно вы там где то и формируете кнопочку. Или JavaScript где то это дело дублирует. Для более точного ответа нужен полный исходник. Так мало что ясно.
|
Часовой пояс GMT +3, время: 00:13. |