如何在wordpress插件中使ajax兼容

时间:2017-08-12 05:05:19

标签: php ajax wordpress

我在wordpress中写了一个插件。它有一些.js个文件和.php个文件,我通过在jquery中调用ajax方法从db接收数据。 当我使用wp_enqueue_script并将它们添加到wordpress时,它可以正常工作。但我的问题是如何使用wp_ajax方法而不是原始的ajax调用。 这是我的代码:

在my.js文件中:

$(document).ready(function(){
$('#submit').on('click', function(){
    var name = $('input[name=name]').val();
    var price = $('input[name=price]').val();
    var goods = $('input[name=goods]').val();
    var date = $('input[name=delivery]').val();
    if( name.length > 1 && price.length >1 && goods.length > 1 && date.length >1){
        var obj = {
            name: name,
            price: price,
            goods: goods,
            date: date
        };
        var btn=$(this).button('loading');
        $.ajax({
            url: "service.php",
            method: "POST",
            data: obj,
            dataType:'json',
            success: function(e){
               $('#alt-div').html('<div id="alert" class="alert alert-info alert-dismissable"><a  href="#" class="close" data-dismiss="alert" aria-label="close">×</a>'+e.Comment+'</div>');
            },
            error: function(){
                alert('error');
            }
        })
    }
});
});

在service.php文件中:

 $name = $_POST['name'];
 $goods = $_POST['goods'];
 $date = $_POST['date'];
 $price = $_POST['price'];
 $tmp = explode('/', $date);
 $jy = $tmp[0];
 $jm = $tmp[1];
 $jd = $tmp[2];

 $query = "INSERT INTO products (name, goods, price, date) VALUES ('$name', 
 '$goods', '$price', '$time')";
 results = mysql_query($query);
 $inserted_id= mysql_insert_id();
 if ($results > 0)
   echo   json_encode ([
    'status'=>1,
    'Comment'=>"ok"]);

1 个答案:

答案 0 :(得分:0)

首先,它不是一个在php文件上发送ajax请求的正确方法。这样做,许多重要的功能都不会被执行,并且可能导致代码容易出现sql注入和其他威胁。

在wordpress中发送ajax的正确方法是wp-admin/admin-ajax.php

只需将您的ajax调用指向admin_url("admin-ajax.php?action=my_action");

即可
$.ajax({
        url: '<?php echo admin_url("admin-ajax.php?action=my_action"); ?>',
        method: "POST",
        data: obj,
        dataType:'json',
        success: function(e){
           $('#alt-div').html('<div id="alert" class="alert alert-info alert-dismissable"><a  href="#" class="close" data-dismiss="alert" aria-label="close">×</a>'+e.Comment+'</div>');
        },
        error: function(){
            alert('error');
        }
    })

请记住在ajax调用中检查您的action参数。它将是您要为此ajax调用执行的函数的标识。现在,您可以在插件或模板functions.php中的任意位置添加以下行。

add_action("wp_ajax_my_action", "my_action_function");
add_action("wp_ajax_nopriv_my_action", "my_action_function");

function my_action_function (){
    //your code
}

现在每当执行ajax调用时。它将转到wp-admin/admin-ajax.php 并且将执行此功能。在这里,您可以处理您的帖子请求。

您可以参考这篇文章获取更多帮助。 https://www.smashingmagazine.com/2011/10/how-to-use-ajax-in-wordpress/