注意:这个答案显示了关于AJAX过程的php后端的一些想法。这是关于前端过程的其他答案的补充。
1.-在WP中管理AJAX请求的模型,只是一些想法,好吗?
add_action('init', 'process_ajax_callback');
function process_ajax_callback()
{
if (! $_REQUEST['go_ajax'])
{
return;
}
try
{
if (isset($_REQUEST['nonce_my_ajax']))
{
$nonce = $_REQUEST['nonce_my_ajax'];
if (! wp_verify_nonce($nonce = $_REQUEST['nonce_my_ajax'], 'nonce_my_ajax'))
{
throw new Exception("Nonce token invalid."); // security
}
}
}
catch (Exception $e)
{
$output['result'] = false;
$output['message'] = $e->getMessage();
echo json_encode($output);
exit;
}
$result = true;
$message = '';
switch ($_REQUEST['action'])
{
case 'update_price':
try
{
// update price
// price value comes in $_REQUEST['price']
}
catch (Exception $e)
{
$result = false;
$message = $e->getMessage();
}
break;
case 'other_actions':
break;
}
$output['result'] = $result ? true : false;
$output['message'] = $message;
echo json_encode($output);
exit;
}
2:不要忘记安全
// nonce_my_ajax is passed to javascript like this:
wp_localize_script('my_js_admin', 'myJsVars', array(
'nonce_my_ajax' => wp_create_nonce('nonce_my_ajax')
));
一般3.-所需的前端(与后端样机上面显示使用的)是一样的东西:
$("select[name='ChangeCurrency']").live("change", function() {
var price = $(this).val();
$.post(
window.location.href,
{
go_ajax : 1, // parse ajax
action : 'update_price', // what to do
price : price, // vars to use in backend
nonce_my_ajax : myJsVars.nonce_my_ajax // security
},
function(output) {
if (output.result == true)
// update widgets or whatever
// $("#my_div").html("we happy, yabadabadoo!");
// or do nothing (AJAX action was successful)
else
alert(output.message)
}, 'json');
});
4.-您可以使用$.get()
或$.post()
向服务器发送/处理数据,但在更新数据库时不好,因为您无法管理返回的消息o f故障,其响应的精度为json
(例如:倍数验证错误消息)。只需使用即可加载HTML视图。
UPDATE:
设置session_id()
其中既可用于正常请求和AJAX请求,在早期阶段尽可能被执行。我希望您使用的是类来包装你的插件,如果不是现在是合适的时机做...例如:
class my_plugin {
function __construct()
{
if (! session_id())
{
session_start();
}
add_action('init', array($this, 'process_ajax_callback'));
// ...
}
function process_ajax_callback()
{
// ...
}
}
更新2:
关于基于现时安全:
WordPress中提供的安全功能是“随机数”。通常,“随机数”是一种令牌,只能使用一次,并且经常用于防止未经授权的人员代表另一个 人员提交数据。
编号:http://myatus.com/p/wordpress-caching-and-nonce-lifespan/
在此样机nonce_my_ajax
仅仅是一个例子,实际上它应该是更独特的像nonce_{my_plugin_name}
,甚至更好nonce_{my_plugin_name}_{what_action}
其中what_action
代表updating user
,或inserting new book
等..
有关更多信息:WP Codex: WordPress Nonces,WPtuts+: Capabilities and Nonces。
您在页面上需要价格货币的产品如何? – stefanz
这是表格产品定价。大约有7个表格(简码小部件),每个表格大约有14个价格需要更改。装载页面时,价格目前以php计算。 – Gravy