我正在尝试通过AJAX表单上传音频文件。
这是我在个人资料编辑模板中的HTML。
<form method="post" id="my_upload_form" action="" enctype="multipart/form-data">
<input type="file" name="file" id="my_file_input" accept="audio/*">
<input type="submit" class="btn-submit btn-sumary" value="upload audio file" name="submit" id="my_audio_submit">
<div id="my_error_report"></div>
</form>
以下是我的jQuery:
$(\'#my_upload_form\').submit(function () {
var css = \'font:Helvetica; color:red; font-size:1.5em; padding:inherit;\';
var html = \'<strong><em> \' + \'<p style="\' + css + \'">\' + \'*\';
var endHtml = \'</p></em></strong>\';
var formData = new FormData();
var fileArray = jQuery(\'#my_file_input\').prop(\'files\');
if(fileArray.length > 0) {
var theTrack = fileArray[0];
formData.append("music", theTrack);
} else {
jQuery(\'#my_error_report\').html( html + \'no track selected\' + endHtml );
return false;
}
$.ajax({
url: \'/wp-admin/admin-ajax.php\',
type: \'POST\',
// async: false,
data: {
action : \'my_track_upload\',
some_data : formData
},
// dataType: \'text\'
}).success( function( data ) {
/* You win! */
alert(\'ajax was called success\');
}).fail( function( data ) {
/* You lose, show error */
alert(\'ajax was called failure\');
});
return false;
});
最后是我的插件代码:
add_action(\'wp_ajax_my_track_upload\', \'my_track_upload\');
function my_track_upload()
{
die(\'hello\');
}
问题(还有更多):为什么页面会刷新?我在jQuery“submit”事件中返回false。
************************编辑********************
我将代码改为以下代码,现在可以使用了,但我不确定问题出在哪里。
。。。。。。。。。
var theTrack = fileArray[0];
formData.append(\'action\', \'musistic_track_upload\');
formData.append("music", theTrack);
enter code here
。。。。。。。。。
$.ajax({
url: \'/wp-admin/admin-ajax.php\',
type: \'POST\',
data: formData,
enctype: \'multipart/form-data\',
contentType: false,
processData: false,
datatype: "script",
beforeSend: function() {
jQuery(\'#my_error_report\').html(\'\');
}
}).complete(function( data ) {
jQuery(\'#my_error_report\').html( html + data.responseText + endHtml );
jQuery(\'#my_audio_submit\').val("Upload Audio File", function() {
jQuery(this).prop(\'disabled\', false);
});
});
return false;
SO网友:Jeffrey Ponsen
尝试使用preventDefault()
, 这是一个jQuery函数,用于防止浏览器调用默认操作。
首先,您应该通过启动提交者来调用事件处理程序。您可以按如下操作:
$(\'#my_upload_form\').submit(function (event) {
捕获提交并提供事件后,应防止默认刷新浏览器:
event.preventDefault();
现在,您的代码如下所示:
$(\'#my_upload_form\').submit(function (event) {
event.preventDefault();
var css = \'font:Helvetica; color:red; font-size:1.5em; padding:inherit;\';
var html = \'<strong><em> \' + \'<p style="\' + css + \'">\' + \'*\';
var endHtml = \'</p></em></strong>\';
var formData = new FormData();
var fileArray = jQuery(\'#my_file_input\').prop(\'files\');
if(fileArray.length > 0) {
var theTrack = fileArray[0];
formData.append("music", theTrack);
} else {
jQuery(\'#my_error_report\').html( html + \'no track selected\' + endHtml );
return false;
}
$.ajax({
url: \'/wp-admin/admin-ajax.php\',
type: \'POST\',
// async: false,
data: {
action : \'my_track_upload\',
some_data : formData
},
// dataType: \'text\'
}).success( function( data ) {
/* You win! */
alert(\'ajax was called success\');
}).fail( function( data ) {
/* You lose, show error */
alert(\'ajax was called failure\');
});
});
顺便说一句:始终尝试放置
preventDefault()
在函数顶部,它应该在执行任何其他操作之前阻止默认操作。