2017-08-12 81 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)'時,什麼都沒有顯示 –