admin-ajax.php不识别'动作'。 $ _REQUEST为空

时间:2018-03-11 11:39:59

标签: ajax wordpress

经过两天毫无结果的研究,我决定加入社区。我希望得到一个解决方案。我开发了一个插件,除其他外,必须实现文档上传。这应该使用ajax技术完成。问题是请求被批准,但admin_ajax.php的反应就像没有采取任何行动一样。在wp之外,这段代码工作正常,因为它被认为是。在wp中安装此代码会带来问题。以下是我的代码

  1. PHP。主类中的这段代码将从插件的主模块

    调用
    class main{
    
     //other activation methods 
    
        private  function register_scripts(){
    
            add_action('wp_enqueue_scripts', array($this,'re_add_script'));
    
        }
    
        public function re_add_script() { 
    
            wp_enqueue_script('re_upload',plugins_url('re'.'/js/re_upload.js'),array('jquery'));
    
            wp_localize_script('re_upload',"re_ajax",array(
                    'ajaxurl'=>admin_url("admin-ajax.php")));
    
            add_action( 'wp_ajax_upload', 'processingUpload');  
       }
    
    }//end of class
    
    //callback function
    
    function processingUpload(){ 
         $clsUpload = new UploadsDocs();
    
         $clsUpload->setRequestedData($_FILES,$_POST['doc_id']);
    
         $clsUpload->checkUploadsFiles();
    
         $clsUpload->outputFilesList();
    
         wp_die();
    
    }
    
  2. jQuery're_upload.js'

    jQuery(document).ready(function (e) {
     jQuery('#bt_upload').on('click', function () {
         var toUpload=getFileListToUpload(); 
         var form_data = new FormData();
         var ins = input.files.length;
         for (var x = 0; x < ins; x++) {
             if (isFileToUpload(input.files[x],toUpload)){
                 form_data.append("files[]", input.files[x]);
             }
         }
         form_data.append("doc_id", jQuery('#doc_id')[0].value);
         var data_to_sent={
             action: 'upload',
             datas: form_data
         };
         jQuery.ajax({
             url: re_ajax.ajaxurl, // point to server-side PHP script 
             dataType: 'text', // what to expect back from the PHP script
             cache: false,
             contentType: false,
             processData: false,
             data: data_to_sent,
             type: 'post',
             success: function (response) {
                 // do something
             },
             error: function (response) {
                 // do something
             },
             xhr: function(){
                //upload Progress
                var xhr = jQuery.ajaxSettings.xhr();
                if (xhr.upload) {
                    xhr.upload.addEventListener('progress', function(event) {
                        var percent = 0;
                        var position = event.loaded || event.position;
                        var total = event.total;
                        if (event.lengthComputable) {
                            percent = Math.ceil(position / total * 100);
                        }
                        //update progressbar
                        jQuery('#bt_upload').css("display","none");
                        jQuery('#progress-wrp').css("display","block");
                        jQuery('#progress-wrp' +" .progress-bar").css("width", + percent +"%");
                        (percent<50)? jQuery('#progress-status').addClass('status-less-then-50'): jQuery('.status-less-then-50').removeClass('status-less-then-50').addClass('status-more-then-50');
                        jQuery('#progress-status').text("Uploading..."+percent +"%");
                    }, true);
                }
                return xhr;
            },
            mimeType:"multipart/form-data" 
         });
      });
    });
    
    
    function getFileListToUpload(){
      var list=[];
      var elem = document.getElementsByClassName('preview');
      var tag_li=elem[0].querySelectorAll('p');
      for (var i=0;i<tag_li.length;i++){
         list[i]=tag_li[i].textContent.split('(')[0];
      }
       return list;
    
     }
    
      function isFileToUpload(input_file,files_toUpload){
         var res=false;
    
       for(var i=0; i<files_toUpload.length;i++){
            if (input_file.name==files_toUpload[i]){
              res=true;
              break;
       }
       }
           return res;
       }
    

2 个答案:

答案 0 :(得分:1)

问题是

add_action( 'wp_ajax_upload', 'processingUpload');

未被调用。

上传是在两次单独的服务器调用中完成的。第一次调用将上载页面显示给用户。第二次调用处理AJAX请求。您致电

add_action( 'wp_ajax_upload', 'processingUpload');

在第一次调用中完成,不需要它,但在第二次调用时不需要。

请阅读https://codex.wordpress.org/AJAX_in_Plugins。 (仔细观察对&#39; add_action(&#39; wp_ajax _...&#39;,...)的调用是如何完成的。)此外,您需要阅读nonces

答案 1 :(得分:0)

尝试将动作附加到您的ajax网址,例如:

           url: re_ajax.ajaxurl?action=upload 

           data: form_data

或将其传递给form_data,如:

        form_data.append('action', 'upload')