我正在构建一个自定义jQuery表单,需要在加载/wp admin/admin ajax的url中指定siteurl。php。
我将此代码放置在具有以下格式的模板中:
<script type="text/javascript">
jQuery(\'#newFeedbackForm\').submit(ajaxSubmit);
function ajaxSubmit(){
var newFeedbackForm = jQuery(this).serialize();
jQuery.ajax({
type:"POST",
url: <?php get_bloginfo(\'siteurl\'); ?> . "/wp-admin/admin-ajax.php",
data: newFeedbackForm,
success:function(data){
jQuery("#feedback").html(data);
}
});
return false;
}
</script>
当我提交表格时,我得到
404 error URL中的所有表单输入。我认为ajax在处理表单和应用隐藏值的功能时没有被正确调用:
<input type="hidden" name="action" value="addComment"/>
向后操作,下面是addComment函数:
function addComment(){
global $wpdb;
$topic = $_POST[\'topic\'];
$name = $_POST[\'name\'];
$email = $_POST[\'email\'];
$no_results_comment = $_POST[\'no_results_comment\'];
// EXTRA
$date = time(); // UNIX TIMESTAMP
if($wpdb->insert(\'wp_no_results_feedback\',array(
\'topic\' => $topic,
\'name\' => $name,
\'email\' => $email,
\'no_results_comment\' => $no_results_comment,
\'date\' => $date
))===FALSE){
echo "Error";
}else{
echo "Thanks for your feedback. We will get back to you shortly.";
}
die();
}
add_action(\'wp_ajax_addComment\',\'addComment\');
add_action(\'wp_ajax_nopriv_addComment\',\'addComment\');
SO网友:iantsch
遵循@MathSmath的答案
如果您的JavaScript正在admin中运行,则无需设置admin ajax的显式路径。php。它始终可以作为一个名为“ajaxurl”的JS变量使用。您可以在Codex的标题“管理端的AJAX”下看到这方面的一个示例
不幸的是,默认情况下,Ajaxurl在前端不可用。但您可以使用带有wp\\u localize\\u script()的trcik在自定义命名空间中声明它,并在前端脚本中使用它。这是一个非常方便的技巧。更多信息,请参阅这篇博文(也可从《食品法典》的那篇文章链接)。
您应该通过以下方式使AJAX url全局可用wp_localize_script
.
此外,我建议将HTML和JS代码分开。
你可以这样做:
function my_enqueue_scripts() {
wp_enqueue_script( \'jquery\' );
wp_localize_script(\'jquery\', \'myAjax\', array(
\'url\' => admin_url(\'admin-ajax.php\')
));
wp_enqueue_script( \'my-ajax\', get_template_directory_uri().\'/path/to/my_ajax.js\', array(\'jquery\') );
}
add_action(\'enqueue_scripts\',\'my_enqueue_scripts\');
您的JS文件,例如。
my_ajax.js
jQuery(\'#newFeedbackForm\').submit(ajaxSubmit);
function ajaxSubmit(){
var newFeedbackForm = jQuery(this).serialize();
jQuery.ajax({
type:"POST",
url: myAjax.url,
data: newFeedbackForm,
success:function(data){
jQuery("#feedback").html(data);
}
});
return false;
}