Specify ABSPATH in jQuery url

时间:2012-05-30 作者:AlxVallejo

我正在构建一个自定义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\');

3 个回复
最合适的回答,由SO网友:MathSmath 整理而成

如果您的JavaScript正在admin中运行,则无需设置admin ajax的显式路径。php。它始终可以作为一个名为“ajaxurl”的JS变量使用。你可以看到an example of this in the Codex, 标题为“管理端的AJAX”

不幸的是,默认情况下,Ajaxurl在前端不可用。但您可以使用带有wp\\u localize\\u script()的trcik在自定义命名空间中声明它,并在前端脚本中使用它。这是一个非常方便的技巧。更多信息this blog post (也与该法典文章链接)。

SO网友:Rutwick Gangurde

按照@MathSmath的答案,您可以ajaxurl 可在前端使用以下代码段:

add_action(\'wp_head\',\'pluginname_ajaxurl\');
function pluginname_ajaxurl() {
    ?>
    <script type="text/javascript">
        var ajaxurl = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';
    </script>
    <?php
}
您需要将操作名称传递给jQuery.ajax 功能如下:

jQuery.ajax({
    action: \'addComment\'
    type:"POST",
    data: newFeedbackForm,
    success:function(data){
        jQuery("#feedback").html(data);
    }
});

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;
}

结束

相关推荐

AJAX函数不返回任何结果

当我单击一个链接时,我试图创建一个ajax调用,该链接是帖子缩略图,结果应该显示帖子内容。当我使用管理ajax时。php它工作得很好,但问题是URL无法访问。这是我的ajaxcall $.ajax({ //url: admin_url + \'/wp-admin/admin-ajax.php\', url: href + \'?action=ajax\', dataType: \'json\', dat