Wordpress admin-ajax.php失败
我在主题选项页面中使用了几个AJAX请求。这两种方法以前都工作得很好,但现在第一种方法可以工作,第二种方法每次都会失败——失败在Firebug:中看起来像这样,在Webkit:cl.ly/1wYn中就是这样。我没有得到任何回应。问题是,第一个很好用 以下是提交的JS(jQuery):Wordpress admin-ajax.php失败,php,jquery,wordpress,Php,Jquery,Wordpress,我在主题选项页面中使用了几个AJAX请求。这两种方法以前都工作得很好,但现在第一种方法可以工作,第二种方法每次都会失败——失败在Firebug:中看起来像这样,在Webkit:cl.ly/1wYn中就是这样。我没有得到任何回应。问题是,第一个很好用 以下是提交的JS(jQuery): jQuery('.cropimage').click(function(){ var pid = jQuery('#tump_header_img').val(); var path = jQuery('#he
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\u crop\u image
会给出错误,您会看到吗?有你?当您在那里放置var\u 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\u action
功能中打印一些内容(但仅当$\u REQUEST['action']==“crop\u apply\u header\u image”
时),然后从那里开始打印
如果您已经设置了XDebug或Zend调试器(值得花费时间和麻烦),那么您可以在不使用所有这些打印语句的情况下单步执行代码。但是对于这样一个简单的调试,它应该可以工作。是什么触发了
wp\u ajax\u crop\u apply\u header\u image
操作?我的术语在这里并不完美,但基本上是这样的:jQuery.post(ajaxurl,{pid:pid,action:'crop\u apply\u header\u image'…在wp-ajax.php中,add\u action()查找由wp_ajax_389;预先编写的操作。有什么意义吗?这就是我了解到它的工作方式,也是它成功用于我的另一个调用的方式。我尝试用var_dump、simple echos、return(“hello world”)替换该函数的内容,等等。我不能让这个函数做任何事情,所以这告诉我它是介于jQuery请求和functions.php之间的-这是admin ajax.php。我添加了一些关于调试的建议,也许你已经尝试了所有这些?删除check\u admin\u referer()
打电话,看看是否有响应-如果有,那就是当前值的问题:pI进行了更多的调试。编辑admin-ajax.php是一个好主意,所以我在那里尝试了很多方法-包括注释整个文件并用var_转储文件替换。没有。请求显然从未到达admin-ajax.php,这是一个非常有用的方法t让我感到困惑。第一个请求是如何完成的?它归结为一个页面上的两个请求或一个JS文件中的两个请求不起作用,我不知道为什么,但这是第一个请求(起作用):jQuery.post(ajaxurl,{pid:pid,action:'get_large_attachment',security:security},function(response){…所以,如果我复制它并将其放置在第二个请求所在的位置,使其完全相同,它仍然会失败,没有任何错误消息或提示。这可能与Apache有关吗?我在admin-ajax.php上尝试了CHMOD 777。