【问题标题】:Wordpress admin-ajax.php FailureWordpress admin-ajax.php 失败
【发布时间】:2010-08-10 18:44:12
【问题描述】:

我在主题选项页面中使用了几个 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_ajax_crop_apply_header_image 操作?
  • 我的术语在这里并不完美,但基本上是这样:jQuery.post(ajaxurl, {pid: pid, action: 'crop_apply_header_image'... 在 wp-ajax.php 中, add_action() 查找由 wp_ajax_ 预先设置的操作。有意义吗?这就是我了解到它的工作方式以及它在我的其他调用中成功工作的方式。

标签: php jquery wordpress


【解决方案1】:

如果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 调试器(值得花时间和麻烦),您可以在不使用所有这些打印语句的情况下单步执行代码。但是对于像这样的简单调试,它应该可以工作。

【讨论】:

  • 我尝试用 var_dump、简单的 echos、return("hello world") 等替换该函数的内容。我无法让这个函数做任何事情,所以这告诉我它是什么在 jQuery 请求和 functions.php 之间 - 这是 admin-ajax.php。
  • 我添加了一些关于调试的建议,也许你已经尝试过了?
  • 删除check_admin_referer() 电话,看看你是否得到回应——如果你得到回应,那就是你的随机数有问题:p
  • 我又做了一些调试。编辑 admin-ajax.php 是个好主意,所以我在那里尝试了很多东西 - 包括注释掉整个文件并用 var_dump 替换它。没有。该请求显然甚至从未到达 admin-ajax.php,这让我感到困惑。第一个请求如何完成?
  • 它归结为一个页面上的两个请求或一个 JS 文件中的两个请求不起作用,我不知道为什么,但这是第一个请求(有效): jQuery.post(ajaxurl, { pid: pid, action: 'get_large_attachment', security: security}, function(response) {... 所以如果我复制它并将它放在我的第二个请求所在的位置,以便它完全相同,它仍然会失败且没有错误任何消息或提示。这可能与 Apache 有关吗?我在 admin-ajax.php 上尝试了 CHMOD 777。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2021-02-11
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多