2017-08-12 75 views
0

我在wordpress中写了一个插件。它有一些.js文件和.php文件,我通过在jquery中调用ajax方法从db接收数据。 当我使用wp_enqueue_script并将它们添加到wordpress时,它工作正常。但我的问题是如何使用wp_ajax方法,而不是原始的ajax调用。 这里是我的代码:如何在wordpress插件中兼容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"]); 
+0

检查此https://stackoverflow.com/questions/43557755/how-to-call-ajax-in-wordpress – vel

回答

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调用。这将是你想为这个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/

+0

所有脚本文件都在我的js文件夹中。所以他们的类型是'.js'。如何在其中包含'php'标签 –

+0

通常'ajax_url'已经可用。你可以尝试'console.log(ajax_url)'或'alert(ajax_url)'来检查。 。如果它不可用,那么你可以尝试'wp_localize_script' ... https://gist.github.com/nickpelton/11146942 –

+0

我不明白你的意思。如何发送ajax_url到'my.js'。当我写'console.log(ajax_url)'时,什么都没有显示 –