Я работаю над проектом WordPress и у меня возникают проблемы с ajax.
Я пытаюсь настроить вызов ajax со страницы WordPress на PHP-скрипт, который я назвал getHistoricalTransFunctions.php. Затем getHistoricalTransFunctions.php включает файл, полный функций, и запускает нужную мне функцию. Необходимая функция затем распечатывает ответ, который отправляется обратно в мой код JavaScript, который затем отображает ответ. Уловка в том, что я пытаюсь вызвать функцию NEEDS в среде WordPress, потому что она вызывает определенные функции WordPress.
Я провел некоторое исследование и обнаружил, что wordpress предоставляет обработчик ajax в admin-ajax.php. Я прошел ряд уроков, в том числе:
http://codex.wordpress.org/AJAX_in_Plugins/
http://www.1stwebdesigner.com/css/implement-ajax-wordpress-themes/
http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/
Я следовал всем этим, но по какой-то причине я получаю ответ «-1» со страницы admin-ajax.php. Я проследил это и обнаружил, что он происходит из функции is_user_logged_in (). Очевидно, WordPress не считает, что мой пользователь вошел в систему, поэтому он выдает ошибки в этом блоке кода. Вот часть моего кода:
Это мой вызов JavaScript:
$('button#RunReportButton2').click(function() {
$('#transactionContainer2').html("<img src='<?php echo $RootDomain; ?>/wp-content/themes/test-client/images/ajax-loader.gif' id='ajaxloader' style='margin: 170px auto auto 340px;' />");
var fromDate2 = $('#fromDate2').val();
var toDate2 = $('#toDate2').val();
$.ajax({ type: "POST",
url:ajaxurl,
type:'POST',
data: { action:"runReport2",
startingInt:"0",
fromDate:fromDate2,
toDate:toDate2 },
success: function(html) {
$('#transactionContainer2').html(html);
}
});
return false;
});
Я добавил это в конец admin-ajax.php:
add_action(wp_ajax_nopriv_runReport2, runReport2);
add_action(wp_ajax_runReport2, runReport2);
Тогда моя фактическая функция php, которая вызывается:
function runReport2() {
include("$RootDomain/wp-content/themes/test-client/reports/historicalTransFunctions.php");
$startingIndex = $_POST['startingInt'];
//$startingIndex = 0;
$fromDate = $_POST['fromDate'];
//$fromDate = "2011-02-11";
$toDate = $_POST['toDate'];
//$toDate = "2011-12-05";
// post variable sanitization
if(!is_numeric($startingIndex)) {
printHistoricalTransactions($token, $client, 0);
die();
}
if($startingIndex <= 0) {
printHistoricalTransactions($token, $client, 0);
die();
}
// match date
$dateregex = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/';
if($toDate != "" && $fromDate != "") {
if(preg_match($dateregex, $fromDate) && preg_match($dateregex, $toDate))
printHistoricalTransactions($token, $client, $startingIndex, $fromDate, $toDate);
} else {
printHistoricalTransactions($token, $client, $startingIndex);
}
die();
}
Мне интересно, является ли admin-ajax.php лучшим способом сделать то, что мне нужно, и мне также интересно, почему это не работает? Спасибо!