我在获取通过ajax请求传递的JSON数据时遇到了一些问题。
我正在尝试将媒体上传程序实现到插件设置页面中。我已经用this method 就媒体上传器功能而言。我希望能够检索PHP中的“附件”数据,对其进行解码,然后在关闭媒体上载程序并选择图像后对其进行处理。ajax请求正在工作,因为我可以回显一个响应并接收它,但当我尝试解码JSON字符串并执行vardump时,它返回null,如果我尝试访问数组键,它将为空。这是js代码。。。
jQuery(document).ready(function($){
var file_frame;
jQuery(\'.upload_image_button\').live(\'click\', function( event ){
event.preventDefault();
if ( file_frame ) {
file_frame.open();
return;
}
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery( this ).data( \'uploader_title\' ),
button: {
text: jQuery( this ).data( \'uploader_button_text\' ),
},
multiple: true
});
file_frame.on( \'select\', function() {
var selection = file_frame.state().get(\'selection\');
selection.map( function( attachment ) {
attachment = attachment.toJSON();
$.post(ajax_object.ajaxurl, {
action: \'ajax_action\',
data: attachment
}, function(data) {
console.log(data);
});
});
});
file_frame.open();
});
});
下面是php函数,它位于接收ajax请求的主插件文件中。。。
function ajax_action_stuff() {
$image_data = $_POST[\'data\'];
$data = json_decode( $image_data, true );
var_dump( $data );
// echo $data[url];
die();
}
add_action( \'wp_ajax_ajax_action\', \'ajax_action_stuff\' );
以及位于主插件文件中的排队脚本。。。
function gzmu_load_scripts() {
wp_enqueue_media();
wp_enqueue_script( \'gzmu-media-upload\', plugin_dir_url(__FILE__) . \'gzmu-media-upload.js\' );
wp_localize_script( \'gzmu-media-upload\', \'ajax_object\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
wp_enqueue_style( \'admin-styles\', plugin_dir_url(__FILE__) . \'/css/admin.css\' );
}
add_action( \'admin_enqueue_scripts\', \'gzmu_load_scripts\' );
我以前从未使用过JSON,所以我对如何处理数据有点困惑。如能就我可能做错的事情提供任何建议,我将不胜感激。谢谢