我已经完成了本书的所有工作,无法弄清楚出了什么问题?请帮忙!
这是我的Ajax调用:
//Pass data through AJAX
var amountToConvert = price;
jQuery.ajax({
type:"POST",
url: "../../wp-admin/admin-ajax.php", // our PHP handler file
action: "ajaxConversion",
data: {
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
return false;
而functions.php中的函数是:
function ajaxConversion(){
$amount = mysql_real_escape_string($_POST['amount']);
echo $amount;
die();
};
add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');
#1 楼
您可以将操作(ajaxConversion)放入数据中并检查吗?jQuery.ajax({
type:"POST",
url: ajaxurl,
data: {
action: "ajaxConversion",
amount: amountToConvert
},
success:function(data){
alert(data);
},
error: function(errorThrown){
alert(errorThrown);
}
});
评论
仍然以某种方式将0附加到我的内容中。
– TR3B
2014年3月26日15:55
@BenRacicot:是否可以检查PHP代码中是否有任何输出类似echo,die()等的语句?
–Jayawi Perera
2014-3-27的3:26
嗨,周杰伦,原来是添加die();给我的ajax func修好了!
– TR3B
2014年3月27日13:46
#2 楼
在AJAX函数末尾使用wp_die();
为我解决了此问题。例如
add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );
function my_ajax_function(){
echo json_encode($myvar);
wp_die();
}
评论
谢谢...不知道为什么,但只使用die()无效。
–敏捷的SEO
15年7月12日在8:38
#3 楼
对我来说,诀窍是添加wp_ajax_nopriv
操作。登录WP admin时,我在一个浏览器上测试了该脚本,然后在Chrome中尝试了相同的脚本,并意识到该脚本不起作用。输入wp_ajax_nopriv
之后,一切都开始工作。 :) add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );
function erase_uploaded_images() {
$attach_id = filter_input( INPUT_POST, 'attach_id' );
wp_delete_attachment( $attach_id );
if ( isset( $_SESSION['uploaded_images'] ) ) {
$array_attachments = $_SESSION['uploaded_images'];
if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
unset( $array_attachments[$key] );
}
$_SESSION['uploaded_images'] = $array_attachments;
}
wp_die();
}
评论
我的朋友,这为我节省了两个小时的挫败感。将应用程序部署到另一个环境时要学习的另一课T_T
–树阮
17年6月1日在3:49
这是非常正确的...如果您登录到管理员,则不会调用_nopriv函数
– Michal Holub
17年11月7日在13:48
#4 楼
我建议在服务器端使用wp_send_json_success()和wp_send_json_error()。您不必担心die()等,并且会自动发送“ status”变量,这种方式更加简洁。例如,
function ajaxConversion(){
// ...
wp_send_json_success(array(
'amount' => $amount
));
}
将导致如下所示:
{
"success":true,
"data":{"amount":125}
}
所以您可以轻松提取ajax调用中的值:
jQuery.ajax({
type : 'post',
data : {
action: 'ajaxConversion',
//nonce : ajax.nonce
},
dataType : 'json',
url : ajax.ajaxurl,
success : function(data){
if(data.success) {
alert(data.amount);
} else {
alert(data.data.message);
}
}
});
我遇到的另一个常见问题是动作名称中的错别字。登录时,它们应该是wp_ajax_nopriv_ {action}或
wp_ajax_ {action}。例如,wp-ajax_nopriv是我过去几次做过的事情。
评论
此权利应该是正确且被接受的答案。惊人!
–eballeste
20-2-11在17:32
#5 楼
对我来说,事实是我在PHP函数中使用的是return
而不是echo
。将其更改为echo
即可对其进行修复。function doAjax() {
$result = getPosts();
echo json_encode($result, true);
die();
}
#6 楼
您可能会忘记在下面的行中添加:add_action("wp_ajax_your_ajax_function", "your_ajax_function");
没有上面的行,则不会触发该ajax。
这是您的ajax函数
function your_ajax_function(){ $result = json_encode($result); echo $result; }
评论
您是否尝试调试代码?还可以使用admin_url('admin-ajax.php')获取AJAX URL,而不是一些伪造的URL。