我正在编写一个插件,通过表单提交使用Ajax(jQuery with form plugin),php函数返回JSON响应。
add_action( \'wp_ajax_bubbly-upload\', \'bubbly_upload_submit\' );
function bubbly_upload_submit() {
// generate the response
$response = json_encode( array( \'success\' => true ) );
// response output
header( "Content-Type: application/json" );
echo $response;
}
在Firefox中,没有任何jQuery响应处理程序启动,保存文件对话框打开时会显示JSON响应。如果我返回HTML,就不会有问题。但是,在任何一种情况下,我的响应末尾都附加了一个“0”。经过一些挖掘,如果JSON响应无效,jQuery似乎不会触发处理程序。将此“0”添加到末尾会导致JSON无效。
如果我调查admin-ajax.php
代码,我看到了:
default :
do_action( \'wp_ajax_\' . $_POST[\'action\'] );
die(\'0\');
break;
endswitch;
The
php docs for die 如果传递的参数是字符串,则在退出之前将打印它,如果是整数,则不会打印它。
在不攻击核心的情况下,有没有办法避免这个问题并仍然使用JSON?还有,这是一个bug吗,因为我不知道如何在每个AJAX响应的末尾添加一个零。。。