我总是遇到AJAX总是返回0的问题!

我已经完成了本书的所有工作,无法弄清楚出了什么问题?请帮忙!

这是我的Ajax调用:

//Pass data through AJAX
var amountToConvert = price;

jQuery.ajax({
      type:"POST",
      url: "../../wp-admin/admin-ajax.php", // our PHP handler file
      action: "ajaxConversion",
      data: {
          amount: amountToConvert
      },
      success:function(data){
      alert(data);
      },
      error: function(errorThrown){
          alert(errorThrown);
      } 

  });
return false;


而functions.php中的函数是:

function ajaxConversion(){

$amount = mysql_real_escape_string($_POST['amount']);

echo $amount;

die();
};

add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');


评论

您是否尝试调试代码?还可以使用admin_url('admin-ajax.php')获取AJAX URL,而不是一些伪造的URL。

#1 楼

您可以将操作(ajaxConversion)放入数据中并检查吗?

jQuery.ajax({
  type:"POST",
  url: ajaxurl,
  data: {
      action: "ajaxConversion",
      amount: amountToConvert
  },
  success:function(data){
  alert(data);
  },
  error: function(errorThrown){
      alert(errorThrown);
  } 

});


评论


仍然以某种方式将0附加到我的内容中。

– TR3B
2014年3月26日15:55

@BenRacicot:是否可以检查PHP代码中是否有任何输出类似echo,die()等的语句?

–Jayawi Perera
2014-3-27的3:26

嗨,周杰伦,原来是添加die();给我的ajax func修好了!

– TR3B
2014年3月27日13:46

#2 楼

在AJAX函数末尾使用wp_die();为我解决了此问题。

例如

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}


评论


谢谢...不知道为什么,但只使用die()无效。

–敏捷的SEO
15年7月12日在8:38

#3 楼

对我来说,诀窍是添加wp_ajax_nopriv操作。登录WP admin时,我在一个浏览器上测试了该脚本,然后在Chrome中尝试了相同的脚本,并意识到该脚本不起作用。输入wp_ajax_nopriv之后,一切都开始工作。 :)

add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );

function erase_uploaded_images() {
    $attach_id = filter_input( INPUT_POST, 'attach_id' );
    wp_delete_attachment( $attach_id );
    if ( isset( $_SESSION['uploaded_images'] ) ) {
        $array_attachments = $_SESSION['uploaded_images'];
        if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
            unset( $array_attachments[$key] );
        }
        $_SESSION['uploaded_images'] = $array_attachments;
    }
    wp_die();
}


评论


我的朋友,这为我节省了两个小时的挫败感。将应用程序部署到另一个环境时要学习的另一课T_T

–树阮
17年6月1日在3:49

这是非常正确的...如果您登录到管理员,则不会调用_nopriv函数

– Michal Holub
17年11月7日在13:48

#4 楼

我建议在服务器端使用wp_send_json_success()和wp_send_json_error()。
您不必担心die()等,并且会自动发送“ status”变量,这种方式更加简洁。例如,

function ajaxConversion(){
    // ...
    wp_send_json_success(array(
      'amount' => $amount
    ));
}


将导致如下所示:

{
 "success":true,
 "data":{"amount":125}
}


所以您可以轻松提取ajax调用中的值:

jQuery.ajax({
    type       : 'post',
    data       : {
                  action: 'ajaxConversion', 
                  //nonce : ajax.nonce                              
                 },
    dataType   : 'json',
    url        : ajax.ajaxurl,
    success    : function(data){
         if(data.success) {
            alert(data.amount);                         
         } else {
            alert(data.data.message);
         }

    }
}); 


我遇到的另一个常见问题是动作名称中的错别字。登录时,它们应该是wp_ajax_nopriv_ {action}或
wp_ajax_ {action}。例如,wp-ajax_nopriv是我过去几次做过的事情。

评论


此权利应该是正确且被接受的答案。惊人!

–eballeste
20-2-11在17:32

#5 楼

对我来说,事实是我在PHP函数中使用的是return而不是echo。将其更改为echo即可对其进行修复。

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}


#6 楼

您可能会忘记在下面的行中添加:
add_action("wp_ajax_your_ajax_function", "your_ajax_function");
没有上面的行,则不会触发该ajax。
这是您的ajax函数
function your_ajax_function(){ $result = json_encode($result); echo $result; }