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