Wordpress admin-ajax.php失败

时间:2010-08-10 18:44:13

标签: php jquery wordpress

我在主题选项页面中使用了几个AJAX请求。两者之前都工作得很好,但是现在第一次工作而第二次失败 - 失败在Firebug中看起来像这样:http://cl.ly/1w5u这是在Webkit中:cl.ly/1wYn。我没有得到任何回应。问题是,第一个工作正常。

这是提交的JS(jQuery):

jQuery('.cropimage').click(function(){
 var pid = jQuery('#tump_header_img').val();
 var path = jQuery('#header_img_edit .container img').attr('src');
 var dimensions = jQuery('#tump_header_img_position').val();

 var security = jQuery('#_ajax_nonce_crop_apply_image').val();

 jQuery.post(ajaxurl, {pid: pid, action: 'crop_apply_header_image', path: path, dimensions: dimensions, security: security}, function(response) {
  console.log(response);
 });
});

ajaxurl是正确的,它与请求中使用的URL完全相同。我试图剥离一切,只是试图得到回应,但没有用。

functions.php中的好东西:

    add_action('wp_ajax_crop_apply_header_image', 'crop_apply_header_image');

    function crop_apply_header_image() {
     check_ajax_referer('crop_apply_header_image', 'security'); 

     $data = $_POST;
     unset($data['security'], $data['action']);

     $dimensions = explode(',',$data['dimensions']);

     $extension_pos = strrpos($data['path'], '/'); // find position of the last dot, so where the extension starts
     $newpath = substr($data['path'], 0, ($extension_pos +1)) . 'cropped-' . substr($data['path'], ($extension_pos + 1));

     update_option( 'tump_header_img_path', $newpath );

     die( wp_crop_image($data['pid'],$dimensions[0],$dimensions[1],$dimensions[2],$dimensions[3],940,200) );
}

无论如何 - 就我所知,它完全没有。我不知道什么是错的,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

如果wp_crop_image会出错,你会看到吗?你有enabled debugging吗?当你在那里放置var_dump($data)时,你看到了什么吗?

尝试在admin-ajax.php拦截到达服务器的控制流。放置一个仅在调用代码时触发的var_dump

if ($_REQUEST['action'] == 'crop_apply_header_image') {
   var_dump($_REQUEST);
   die();
}

如果你看到这个,那么错误发生在WordPress代码的某个地方,但是在这一点与你的处理函数之间没有太多的错误。您的操作应在switch语句结束时在default部分:

中触发
default :
    do_action( 'wp_ajax_' . $_POST['action'] );
    die('0');
    break;
endswitch;

尝试从do_action功能打印一些内容(但仅限于$_REQUEST['action'] == 'crop_apply_header_image'),并从那里开始。

如果您设置了XDebug或Zend Debugger(值得花时间和麻烦),您可以在没有所有这些打印语句的情况下单步执行代码。但对于像这样的简单调试,它应该可以工作。