我在主题选项页面中使用了几个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) );
}
无论如何 - 就我所知,它完全没有。我不知道什么是错的,非常感谢任何帮助!
答案 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(值得花时间和麻烦),您可以在没有所有这些打印语句的情况下单步执行代码。但对于像这样的简单调试,它应该可以工作。