Admin-ajax.php将状态代码附加到AJAX响应

时间:2010-10-04 作者:jjeaton

我正在编写一个插件,通过表单提交使用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;
Thephp docs for die 如果传递的参数是字符串,则在退出之前将打印它,如果是整数,则不会打印它。

在不攻击核心的情况下,有没有办法避免这个问题并仍然使用JSON?还有,这是一个bug吗,因为我不知道如何在每个AJAX响应的末尾添加一个零。。。

1 个回复
最合适的回答,由SO网友:sorich87 整理而成

die(); 在您的功能中:

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;
    die();
}
参考号:WordPress Codex, AJAX in Plugins

结束

相关推荐

在WordPress主题的函数.php文件中组织代码?

我对WordPress进行的自定义越多,我就越开始考虑是否应该组织或拆分此文件。更具体地说,如果我有一堆只适用于管理区域的自定义功能,以及其他只适用于我的公共网站的自定义功能,是否有任何理由可能将所有管理功能包含在自己的文件中或将它们组合在一起?将它们拆分成单独的文件或将它们分组可能会加快WordPress网站的速度吗?WordPress/PHP是否会自动跳过具有is\\U管理代码前缀的函数?处理大型函数文件的最佳方法是什么(我的是1370行)。