Wordpress Ajax调用无法在自定义页面上工作

时间:2017-04-03 14:58:15

标签: php jquery ajax wordpress

一切似乎都是有序的,但仍然没有填充目的地。

到目前为止,我已经验证它可以在我创建的插件中找到PHP和JS文件,甚至可以用XML生成输出。我可以看到我是否允许默认的<a>标记行为。

它会以某种方式阻止生成输出的位置。

由于

这适用于自定义页面。

1 - 这是HTML:

链接到触发ajax:

$link = admin_url('admin-ajax.php?action=pay_dialog_step1&boo_zone='.$palier['palier']);

<a href="' . $link . '" id="' . $palier['palier'].'" class="do_popup btn btn-lg">'.get_option('_boopass_buybtn_label', '').'</a>

要填充的部门:

<div id="alloconv_popup"></div>

插件目录中的2- PHP代码

add_action("wp_ajax_pay_dialog_step1", "pay_dialog_step1");

// ajax call
    function pay_dialog_step1(){
        $boo_zone = $_REQUEST['boo_zone'];
        $response = new WP_Ajax_Response;
        $html = '<div class="bp_entry_wrapper">
                            <div class="entry normal" >
                                <div class="alloconv_palier_header" >
                                    <p> Alloconv ' . get_option('alloconv_' . $_REQUEST['boo_zone'] .'_token', '') . ' tokens </p>
                                </div>';                        
        $html.= get_option('alloconv_' . $_REQUEST['boo_zone'] .'_script', '');                                     
        $html.=     "</div>";
        $html.=     "</div>";

        $response->add( array(
            'data'  => 'success',
            'supplemental' => array(
                'boo_zone' => $boo_zone,
                'message' => $html,
            ),
        ) );        
        $response->send();
        exit(); 
    }

add_action('init', 'ajax_popup_script' );

function ajax_popup_script() {
wp_register_script( "ajax_popup_script", WP_PLUGIN_URL.'/ajax-popup-paiement/ajax_popup_paiement.js', array('jquery') );
wp_localize_script( 'ajax_popup_script', 'ajaxPaiement', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));

wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'ajax_popup_script' );

}   

同一插件目录中的3-jquery代码

jQuery(document).ready( function() {

jQuery(".do_popup").click( function(e) {
    e.preventDefault();
    var link = this;
    var boo_zone= jQuery(link).attr("id");
    var info = {
        action: 'pay_dialog_step1',
        boo_zone: boo_zone
    };

    // Post to the server
    jQuery.ajax({
        type:"POST",
        url:ajaxPaiement.ajaxurl,
        data:info,
        dataType:html,
        success: function(data){        
             jQuery("#alloconv_popup").html(data);
        }
    });     
});
});

2 个答案:

答案 0 :(得分:0)

你必须让wp知道谁可以使用ajax调用。

wp_ajax用于管理部分

add_action('wp_ajax_nopriv_process_ajax_input', 'callBackFunction_Name');

wp_ajax_nopriv适用于非管理员(用户)

function callBackFunction_Name{

    $allFields = $_REQUEST;
    #todo process input.
}

这是回调函数,然后处理你的ajax调用。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-Sample">
    <DisplayName>Assign Message-Sample</DisplayName>
    <Remove>
        <Headers>
            <Header name="login_id"/>
            <Header name="Authorization"/>
        </Headers>
        <Payload>true</Payload>
    </Remove>
    <Set>
        <Payload contentType="application/json">
    {           
        "valueA": "{clientrequest.valueA}",
        "valueB": "{clientrequest.valueB}",
        "valueC": "{clientrequest.valueC}",
        "valueD": "{clientrequest.valueD}",
        "valueE": "{clientrequest.valueE}",
        "valueF": "{clientrequest.valueF}",
    }
        </Payload>
        <Verb>POST</Verb>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

答案 1 :(得分:0)

我终于找到了问题所在。简单地说,在ajax调用中,数据类型应该是'xml'而不是'html。

WP_Ajax_Response生成一个XML文件,因此需要相应地调整ajax调用。