Проблема решена … переменная неопределенная. Я добавлю полный ответ, когда stackoverflow позволяет мне ответить на собственный вопрос
update, firebug сообщает мне, что переменная barrister не определена в plugin.php, но я определяю эту переменную (или, по крайней мере, пытаюсь), это строка, где она предположительно не определена: if(barrister.attr("value"))
это строка, где я пытаюсь ее определить: var barrister = $('input:radio[name=barrister]:checked').val();
Я использую форму с переключателем для отправки данных. Файл plugin.php должен получить данные с помощью javascript / ajax, а затем отправить его в файл results.php, чтобы его можно было вставить в базу данных. Информация также извлекается из базы данных и должна быть вставлена в html. Я не могу понять, где он разрушается, но я знаю, что соединение с базой данных работает. Любая идея, как я могу узнать неработающую ссылку? Когда я тестирую его и проверяю базу данных, в нем нет данных.
Форма
<form method="post" id="form"> <table> <tr> <td><label>Barrister's Exam</label></td> <td><input type="radio" id="barrister" name="barrister" value="1" /> Pass</td> <td><input type="radio" id="barrister" name="barrister" value="0" /> Fail</td> </tr> <tr> <td>Submit</td> <td><input id="send" type="submit" value="Submit" /></td> </tr> </table> </form>
Получение данных формы с помощью plugin.php
function my_function() { ?> <script type="text/javascript"> $(document).ready(function(){ //global vars var barrister = $('input:radio[name=barrister]:checked').val(); var loading = $("#loading"); var messageList = $(".content > ul"); //functions function updateShoutbox(){ //just for the fade effect messageList.hide(); loading.fadeIn(); //send the post to shoutbox.php $.ajax({ type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", data: "action=update", complete: function(data){ loading.fadeOut(); messageList.html(data.responseText); messageList.fadeIn(2000); } }); } //check if all fields are filled function checkForm(){ if(barrister.attr("value")) return true; else return false; } //Load for the first time the shoutbox data updateShoutbox(); //on submit event $("#form").submit(function(){ if(checkForm()){ var barrister = barrister.attr("value"); //we deactivate submit button while sending $("#send").attr({ disabled:true, value:"Sending..." }); $("#send").blur(); //send the post to results.php $.ajax({ type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", data: "action=insert&barrister=" + barrister, complete: function(data){ messageList.html(data.responseText); updateShoutbox(); //reactivate the send button $("#send").attr({ disabled:false, value:"Send" }); } }); } else alert("Please fill all fields!"); //we prevent the refresh of the page after submitting the form return false; }); }); </script> <?php } add_action('wp_head', 'my_function');
вывод данных в таблицу «результатов» базы данных «год» с помощью results.php. Я знаю, что соединение с базой данных работает
<?php define("HOST", "host"); define("USER", "user"); define("PASSWORD", "password"); define("DB", "year"); /************************ FUNCTIONS /************************/ function connect($db, $user, $password){ $link = @mysql_connect($db, $user, $password); if (!$link) die("Could not connect: ".mysql_error()); else{ $db = mysql_select_db(DB); if(!$db) die("Could not select database: ".mysql_error()); else return $link; } } function getContent($link, $num){ $res = @mysql_query("SELECT barrister FROM results ORDER BY date DESC LIMIT ".$num, $link); if(!$res) die("Error: ".mysql_error()); else return $res; } function insertMessage($barrister){ $query = sprintf("INSERT INTO results(barrister) VALUES('%s');", mysql_real_escape_string(strip_tags($barrister)) )); $res = @mysql_query($query); if(!$res) die("Error: ".mysql_error()); else return $res; } /****************************** MANAGE REQUESTS /******************************/ if(!$_POST['action']){ //We are redirecting people to our shoutbox page if they try to enter in our shoutbox.php header ("Location: index.html"); } else{ $link = connect(HOST, USER, PASSWORD); switch($_POST['action']){ case "update": $res = getContent($link, 100); while($row = mysql_fetch_array($res)){ $result .= "<li><strong>".$row['user']."</strong><img src=\"http://eslangel.com/wp-content/plugins/myplugin/CSS/images/bullet.gif\" alt=\"-\" />".$row['message']." </li>"; } echo $result; break; case "insert": echo insertMessage($_POST['barrister']); break; } mysql_close($link); } ?>
Html, где данные возвращаются при извлечении из базы данных
<div id="container"> <ul class="menu"> <li></li> </ul> <span class="clear"></span> <div class="content"> <div id="loading"><img src="http:///></div> <ul> <ul> </div> </div>
Первая ошибка, которую я замечаю, заключается в том, что все ваши переключатели имеют одинаковый идентификатор. Атрибут ID должен быть уникальным на странице. Кроме того, лучшим инструментом для отладки javascript является консоль.
Отладка Javascript для начинающих
РЕДАКТИРОВАТЬ
Вот пример отправки формы ajax с использованием вашей разметки http://jsfiddle.net/UADu5/
$(function(){ // Submit form via ajax $('#check').click(function(){ var barrister = null $.each($("input[name='barrister']:checked"), function(){ if($(this).val() == 1) barrister = $(this).attr('value'); }); if(barrister){ $.ajax({ type: "POST", url: "http://yearofcall.com/wp-content/plugins/myplugin/results.php", data: "action=insert&barrister=" + barrister, complete: function(data){ messageList.html(data.responseText); updateShoutbox(); //reactivate the send button $("#send").attr({ disabled:false, value:"Send" }); } }); } else { alert('Please fill all fields!') } }) }) <form method="post" id="form"> <fieldset> <legend>Grade Exams</legend> <ul> <li> <p>Barrister's Exam</p> <label> <input type="radio" name="barrister" value="1" /> Pass </label> <label> <input type="radio" name="barrister" value="0" /> Fail </label> </li> <li class="submit"> <input type="button" id="check" value="Test"> </li> </ul> </fieldset> </form>
Я настоятельно рекомендую использовать Firebug , так как он покажет вам все сделанные запросы и всю информацию заголовка запроса / ответа, чтобы вы могли видеть, где и где AJAX идет не так. Это также отлично подходит для отладки HTML / CSS-материалов!
Firebug практически изменил мою жизнь, когда дело доходит до JavaScript и CSS.
Я думаю, что у вас есть ошибка в инструкции insert:
// удалять дополнительные скобки и точку с запятой sprintf ("INSERT INTO results (barrister) VALUES ('% s')", mysql_real_escape_string (strip_tags ($ barrister)) );
Надеюсь, поможет
+ Изменить
var barrister = $('input:radio[name=barrister]:checked').val();
в
barrister = $('input:radio[name=barrister]:checked');
должен помочь.