从媒体上传器检索AJAX请求中的JSON数据

时间:2013-09-24 作者:gregz

我在获取通过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,所以我对如何处理数据有点困惑。如能就我可能做错的事情提供任何建议,我将不胜感激。谢谢

3 个回复
SO网友:Anjum

你做错了什么,1号$_POST[\'data\']; 不包含任何post数据使用json数组的键来获取post数据,如。

$data_key1 = $_POST[\'key1\'];
$data_key2 = $_POST[\'key2\'];
// and so on ...
用ajax请求发送的json数据键替换KEY1KEY2等。

SO网友:Tobias Beuving

在你之后var_dump 在函数ajax\\u action\\u stuff中,JSON数据不再是JSON。只是:echo $data;

SO网友:scott

在AJAX调用中,我发现发布数据时不需要将数据编码/解码为JSON。jQuery发送的数据。POST已经存在于键值对中,所以在我看来,您不需要将其设置为JSON,也不需要在中对其进行解码。使用php函数之前。

但是,在将数据发送回jQuery之前,我确实使用了JSON。在我收集数据之后$content, 我将其编码为JSON并在一行中返回:

echo json_encode($content, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
然后在jQuery中,我解码JSON:

function( content ) {
    var myContent = JSON.parse(content);
    // do what you want with the key-value pairs in myContent
}
我希望这对你和我都有用。

结束