У меня проблема, что я застрял в течение нескольких дней … Я пытаюсь использовать простую функцию ajaxPOST для отправки данных в базу данных MySQL (а не в базу данных WP).
Этот код находится внутри темы «single-post.php» в теме, потому что он должен быть проверен перед каждым сообщением.
$.ajax({ url: 'library/functions/admin_checkuser.php', data: {action: userID}, type: 'post', success: function(output) { alert(output); } });
Я просто отправляю переменную в скрипт «admin_checkuser.php», который, в свою очередь, вызывает другой скрипт, который предпринимает действия в базе данных.
Это код для «admin_checkuser»:
$userid = $_POST['action']; echo $userid;//for testing $oMySQL = new MySQL(); $query = "Select * FROM videotable WHERE uid = '$userid'"; $oMySQL->ExecuteSQL($query); $bb = $oMySQL->iRecords; $aa = $oMySQL->aResult; echo $bb; if ($bb == 0){ $query = "INSERT INTO videotable VALUES ('','$userid','true')"; $oMySQL->ExecuteSQL($query); echo 'true'; exit(); }else{ $sharing = mysql_result($aa,0,"share"); echo $sharing; exit(); }
Но я не думаю, что вызовы переходят к сценарию. Эти скрипты, которые тестировались вне WordPress и работали, поэтому в WordPress должно быть что-то, что блокирует вызов ajax. Кстати, я пытался разместить «admin_checkuser.php» во многих разных папках, но ничего не получилось.
Заранее спасибо.
Вы должны проверить свой URL-адрес для своего айхакс-звонка.
Возможно, используйте полный URL, а не относительный.
Возможно, из-за расположения вашей темы неправильный URL-адрес. Я предполагаю, что ваш код ajax находится в папке темы.
Есть некоторые функции wordpress, которые получают каталог тем.
Например, если вы на этой странице http://yourwebpage/test/
то вызов ajax пойдет здесь http://yourwebpage/test/library/functions/admin_checkuser.php
. Я предполагаю, что это будет неправильное местоположение.
Вот почему вам нужно добавить абсолютный URL-адрес в ваш скрипт. И если это в вашей теме, вы можете использовать этот метод get_template_directory_uri()
чтобы получить каталог шаблонов.
См. Здесь: http://codex.wordpress.org/Function_Reference/get_template_directory_uri
Вам гораздо лучше использовать встроенный запрос WordPress AJAX.
Итак, в ваших файлах functions.php
темы добавьте свою функцию для вызова, например:
function checkUser() { $userid = $_POST['user']; //validation also :) $oMySQL = new MySQL(); $query = "Select * FROM videotable WHERE uid = '$userid'"; $oMySQL->ExecuteSQL($query); $bb = $oMySQL->iRecords; $aa = $oMySQL->aResult; echo $bb; if ($bb == 0){ $query = "INSERT INTO videotable VALUES ('','$userid','true')"; $oMySQL->ExecuteSQL($query); echo 'true'; exit(); } else { $sharing = mysql_result($aa,0,"share"); echo $sharing; exit(); } }
После этого вы добавляете свой крючок с подключением к встроенной системе AJAX
add_action('wp_ajax_check_user', 'checkUser'); add_action('wp_ajax_nopriv_check_user', 'checkUser');
wp_ajax_nopriv_%s
позволяет вызывать его из переднего конца.
И затем, в вашем файле javascript, вы просто запускаете свой запрос ajax.
$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { alert(output); });
Если ajaxurl
не определен, вам нужно будет создать его в файле шаблона, что-то вроде этого должно работать, но есть и другие способы.
add_action('wp_head','ajaxurl'); function ajaxurl() { ?> <script type="text/javascript"> var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; </script> <?php }
Остается только backend wordpress.
Он принимает действие, переданное в запросе AJAX, ищет соответствующий `wp_ajax(_nopriv)_%s
а затем вызывает функцию, назначенную на крючок.
Он также будет передаваться либо $_POST
либо $_GET
зависимости от типа запроса AJAX.
Вы можете прочитать немного больше об использовании AJAX внутри WordPress .