我将以下内容添加到我的functions.php文件中:
add_action('wp_ajax_send_email', 'send_email_callback');
add_action('wp_ajax_nopriv_send_email', 'send_email_callback');
所以我添加了以下回调函数:
send_email_callback()
{
//do some processing
echo json_encode(array('response'=>'Ya man it worked.'));
//return control back to *-ajax.php
}
这是我的javascript返回的内容:
{"response":"Ya man it worked."}0
当它到达$ .parseJSON(msg)行时,我得到Uncaught SyntaxError:意外的数字。
var request = $.ajax({
url: "/wp-admin/admin-ajax.php",
method: "POST",
data: { action : 'send_email', P : container },
dataType: "html"
});
request.done(function( msg ) {
var obj = $.parseJSON( msg );
console.log(obj.response);
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
});
那么0来自哪里? 管理-ajax.php 它在第97行说:
// Default status
die( '0' );
为什么会这样,我为什么要到达骰子('0')?不应该只是死()所以它不会搞砸我的回应吗?
似乎修复此问题的唯一方法是修改admin-ajax.php或者直接在send_email_callback()函数结束时使用die()。
答案 0 :(得分:2)
在WordPress AJAX操作中,您不应该return
响应,而是echo
响应并自己致电die
。 WordPress将继续调用所有AJAX注册的回调,直到其中一个回调终止执行,最后一个回复死于0
的响应。
<?php
add_action( 'wp_ajax_my_action', 'my_action_callback' );
function my_action_callback() {
global $wpdb; // this is how you get access to the database
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
wp_die(); // this is required to terminate immediately and return a proper response
}