【问题标题】:Why does Wordpress ajax die('0')为什么Wordpress ajax会死('0')
【发布时间】:2015-07-22 14:28:39
【问题描述】:

我将以下内容添加到我的 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: Unexpected number。

  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 是从哪里来的呢? admin-ajax.php 它在第 97 行说:

// Default status
die( '0' );

为什么会在这里,为什么我会到达 die('0') 行?它不应该只是 die() 这样它就不会弄乱我的响应吗?

似乎解决此问题的唯一方法是修改 admin-ajax.php 或在我的 send_email_callback() 函数末尾简单地 die()。

【问题讨论】:

  • 我从未见过 json_encode 以这种方式使用。如果你改为return json_encode(array('response'=>'Ya man it worked.')); 会发生什么?
  • @jonathan 抱歉输入了它,而不是从项目中粘贴,你是正确的,这是一个错字
  • 酷 - 只有在您的编辑中,您才添加了一对多的左括号。

标签: javascript php wordpress


【解决方案1】:

在 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
}

【讨论】:

  • 对不起,我打错了我没有从那个上下文返回的那一行,只是回显它,然后继续完成执行,仍然在我的回复末尾添加 0
  • @Edward 我想可能是这样。无论如何,您仍然需要调用dieexitwp_die 来停止回调列表。
  • 好的,我明白了,但die() 没有结束回调,这意味着我不会将控制权返回给admin-ajax.php
  • @Edward 是的,这通常是您想要的。 AJAX 回调应该只在您输出内容之前运行。
猜你喜欢
  • 2012-04-19
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2015-10-18
  • 2015-03-09
  • 2019-12-27
相关资源
最近更新 更多