经过多次搜索,我似乎发现get\\u this\\u ID();它的其他迭代也不会在AJAX请求中工作。我是一个公认的PHP noob,谁能解释一下this guy here 完成了吗?他说,他“只是简单地将id回显到一个隐藏的div中,然后通过AJAX调用将其传递回去。”
我的代码如下。
if(wp_verify_nonce($nonce, \'checkbox\') !== false) {
global $post;
$post = $wp_query->get_queried_object();
$post_ID = $post->ID;
$user_ID = get_current_user_id();
$dataArray[$post_ID] = isset($dataArray[\'second_checkbox\']) ? true : false;
if($user_ID != NULL) {
foreach($dataArray as $key=>$value) {
$status = update_user_meta($user_ID, $key, $value);
}
//ajaxStatus(\'success\', \'Meta fields updated.\', $post_ID);
ajaxStatus(\'success\', \'Meta fields updated.\', $dataArray);
它在控制台中为$post\\u ID生成一个空值。
{"status":"success","message":"Meta fields updated.","data":{"":false}}
但在单曲中。php页面,找到$post\\u ID,echo工作
<?php
global $wp_query;
$post = $wp_query->get_queried_object();
$post_ID = $post->ID;
?> <div id="test"><?php echo($post_ID); ?></div>
Javascript就在这里
jQuery(document).ready(function($) {
var response;
$(\'#checkbox\').on(\'submit\',function(e) {
e.preventDefault();
$.post( checkbox.ajaxurl, {
action : \'submit_checkboxes\',
nonce : checkbox.nonce,
post : $(this).serialize()
},
function(response) {
console.log(response);
responseSuccess(response);
});
return false;
});
function responseSuccess(data) {
response = JSON.parse(data);
if(response.status === \'success\') {
$(\'#checkbox-message\').text(response.message);
} else {
$(\'#checkbox-message\').text(response.message);
}
} });
这是ajax
function ajaxStatus($status, $message, $data = NULL) {
$response = array (
\'status\' => $status,
\'message\' => $message,
\'data\' => $data
//\'data\' => $post_ID
);
$output = json_encode($response);
exit($output);
}
最合适的回答,由SO网友:scytale 整理而成
我可能在你的代码中遗漏了什么;但是:
您需要“移动”您的test
div转换为JS变量,然后可以在Ajax中使用该变量(或者直接在$.post中使用div值)。
e、 g。var postID = $(\'#test\').val();
然后使用它将所需信息传递给服务器
$.post( checkbox.ajaxurl, {
action : \'submit_checkboxes\',
nonce : checkbox.nonce,
thispost : postID,
post : $(this).serialize()
},
function(response) {whatever... }
);
在PHP中使用say
intval($_POST[\'thispost\'])
获取职位id并相应使用。
注意:未测试(&O);我倾向于使用jQuery.ajax
使用值的数据字符串,而不是jQuery.post