为什么Wordpress ajax会死('0')

时间:2015-05-11 22:23:20

标签: javascript php wordpress

我将以下内容添加到我的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()。

1 个答案:

答案 0 :(得分:2)

在WordPress AJAX操作中,您不应该return响应,而是echo响应并自己致电die。 WordPress将继续调用所有AJAX注册的回调,直到其中一个回调终止执行,最后一个回复死于0的响应。

来自WordPress编解码器AJAX in Plugins

的示例
<?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
}