php - WordPress admin-ajax.php 失败

标签 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) );
}

无论如何 - 据我所知,这一切都没有实现。我不知道出了什么问题,非常感谢任何帮助!

最佳答案

如果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 代码中的某个位置,但该错误点与处理程序函数之间并没有太多错误。您的操作应该在 default 中的 switch 语句末尾触发。部分:

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

尝试从 do_action 打印一些内容函数(但仅当 $_REQUEST['action'] == 'crop_apply_header_image' ),然后从那里向下。

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

关于php - WordPress admin-ajax.php 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452279/

相关文章:

javascript - 如何在jquery中替换html字符串

javascript - 为什么我不能使用 jQuery 将 php 变量发送到 javascript 变量?

php - 将项目合并到 Amazon EC2 后 file_get_contents 504 网关超时?

javascript - PHP 包含在 DIV 样式背景中

jquery - 悬停时右侧面板闪烁

wordpress - 如何在二十一十二主题的wordpress默认菜单中添加博客链接

javascript - 将 Google Analytics 脚本粘贴到我的网站(head.php、header.php 或 page-header.php)?

css - Wordpress WooCommerce 更改 "Featured Products" slider 中元素的间距

php - "manual"Woocommerce 自定义订单状态的奇怪显示样式

php - 在 Woocommerce 中查找并显示产品自定义字段值