如何使用WP rest API而不是admin-ajax获得相同的ajax结果?

时间:2018-09-23 作者:arabtornado

有人告诉我,管理ajax现在已经过时了,最好改用REST API,但我想知道如何才能获得与此代码相同的结果,该代码使用REST API生成一个按钮,其中包含基于一些变量和自定义字段的链接?

另外,有人告诉我,这段代码不安全,因为我使用的是HTML响应,而不是ajax中的数据,但我想知道如何为这段代码使用数据?

很抱歉,我对编码还是很陌生

  add_action( \'woocommerce_before_add_to_cart_button\', \'simple_amz_link_ajax\', 10);


function simple_amz_link_ajax() {   
?>
<script>

jQuery(document).ready(function(){

             jQuery.ajax({
                url: "<?php echo admin_url(\'admin-ajax.php\'); ?>",
                type: \'POST\',
                data: {
                         action: \'getmyfunctionform1\',
                         postId: <?php echo get_post()->ID; ?>
                },
                dataType: \'html\',
                success: function(response) {

                jQuery("#buy_amz_btn_wrap").html(response);

                }

        }); 
    });
</script> 
<!-- end Ajax call to getmyfunctionform1 smc 11-22-2013 -->

<div id="buy_amz_btn_wrap"> Loading ... </div>

<?php
}

// Amazon Simple Button Function

add_action(\'wp_ajax_getmyfunctionform1\', \'myfunctionform1\');
add_action(\'wp_ajax_nopriv_getmyfunctionform1\', \'myfunctionform1\');

function myfunctionform1() { 
    $postId = filter_input( INPUT_POST, \'postId\', FILTER_SANITIZE_NUMBER_INT );
    $country_code = $_SERVER ["HTTP_CF_IPCOUNTRY"];
    $de_asin = get_post_meta( $postId, "wccaf_de_asin", true );
    $uk_asin = get_post_meta( $postId, "wccaf_uk_asin", true );    

    $not_avilable_country = \'<div id="amz_not_avilable" class="amz_not_avilable">This product is not avilable in your country yet</div>\';


//////////////////////////////////////////////


if ($country_code=="DE" or $country_code=="DE") {
    $amazon_domain = \'https://www.amazon.de\';
    $associate_id = \'bonstato-21\';
    $asin = $de_asin;
}

else if ($country_code=="GB" && $uk_asin!=="") {
    $amazon_domain = \'https://www.amazon.co.uk\';
    $associate_id = \'bonmedico-21\';
    $asin = $uk_asin;
}

///////////////////

global $post;
        $product = wc_get_product( $postId );
        $type = $product->get_type();
        if( $type == \'simple\' && $asin!="" ){   

                // Amazon Link For Mobile       
                ?>
                <script>
                    function amzGo(){
                        window.location=\'<?php echo $amazon_domain ?>/dp/<?php echo $asin ?>/?tag=<?php echo $associate_id ?>\';
                }
                </script>
                <?php


        ?>
            <div class="buy_amz_btn_wrap" >  
                <button type="button" id="buy_amz_btn" class="buy_amz_btn" onclick="amzGo();"><i class="fa fa-amazon fa-amz"></i><?php echo $amz_btn_title ?></button>                           
            </div>
        <?php
        }

        else if( $type == \'simple\' && $asin=="" ){   
            echo $not_avilable_country;
}


die(); 

} 
?>

1 个回复
SO网友:Mark Kaplun

除非你付钱给他们,否则你不应该听“人们告诉你的”,或者他们在这个领域拥有无可争议的权威(知名的安全研究员、wordpress核心贡献者等),同样的,你可能不会听人们告诉你地球是平的。

ajax端点的性能不如wp-json端点好,但作为用户,您可能不会注意到这一点,除非您的站点大量使用ajax,而且它们之间的安全性既不高也不低。

至于在响应ajax请求时返回HTML,这是一个坏习惯,但可以节省PHP和JS的开发时间,尤其是当HTML变化很快时,因此即使在这里也不是一种黑白情况。为了在不同的上下文中灵活地使用响应,您应该使用JSON,但是如果您的ajax请求预期只以一种方式使用,那么返回HTML并没有什么可怕的。

结束

相关推荐

防止在提交AJAX表单后重新加载页面

我正试图用ajax在wordpress中提交表单。但是在第一次提交之后,页面本身被再次调用。我的表单<form class=\"et_pb_contact_form clearfix\" method=\"post\" action=\"\" id=\"loginform\"> <p class=\"et_pb_contact_field et_pb_contact_field_0 et_pb_contact_field_last\" data-id=\"mail\" data-