我的jQuery Form插件中的beforeSubmit函数需要检查所选文件是否已存在于服务器上。下面是相关代码:由jQuery Form Plugin的beforeSubmit不返回值调用的函数
$('#frmSermonUpload').ajaxForm({
beforeSubmit: function() {
// Reset errors and clear messages
ClearForm(false);
var formValid = true,
fileExists = CheckFileExists();
console.log('beforeSubmit fileExists: ' + fileExists);
if (fileExists === 'true') {
$('#uploadedFile').addClass('inputError');
$('#fileErrorMsg').append(' A file with that name already exists on the server.');
formValid = false;
} else {
if (!ValidateUploadForm()) {
formValid = false;
}
}
console.log('formValid: ' + formValid);
if (!formValid) {
return false;
}
},
...
这里的CheckFileExists()函数:
function CheckFileExists() {
var fileName = $('#uploadedFile').val().replace(/C:\\fakepath\\/i, ''),
dataString;
dataString = 'checkFileExists=' + fileName;
console.log('fileName: ' + fileName);
console.log('dataString: ' + dataString);
$.ajax({
type: 'POST',
url: '../scripts/sermonUpload.php',
data: dataString,
success: function(serverResult) {
console.log('serverResult: ' + serverResult);
if (serverResult === 'existsTrue') {
return 'true';
} else {
return 'false';
}
},
error: function(xhr, status, error) {
alert('An error occurred while attempting to determine if the selected file exists. Please try again.);
}
});
//console.log('Current value of returnResult: ' + returnResult);
//return returnResult;
}
正如你可以看到我使用控制台输出来检查这是怎么回事。在CheckFileExists()函数中,正在报告fileName和dataString。在PHP方面,我知道由于某些日志记录,POST数据已经到达那里。
下面是一个使用POST数据的PHP代码:
if (isset($_POST['checkFileExists']) && $_POST['checkFileExists'] !== '') {
$log->lwrite('**Checking if file exists.**');
$fileToCheck = $targetPath . $_POST['checkFileExists'];
$log->lwrite('file_exists: ' . file_exists($fileToCheck));
if (file_exists($fileToCheck)) {
echo 'existsTrue';
} else {
echo 'existsFalse';
}
}
发生了什么事,在控制台,行console.log('beforeSubmit fileExists: ' + fileExists);
将返回 “未定义”(beforeSubmit fileExists: undefined
)。
这里的所有控制台输出该文件已经存在一个上传的,所以beforeSubmit应停止:
fileName: 042913sermon.mp3
dataString; checkFileExists=042913sermon.mp3
beforeSubmit fileExists: undefined
formValid: true
serverResult: existsTrue
它必须是显著的serverResult
在其他所有内容后,行显示。这是否与ajax通话需要多长时间有关?如果是这样,有没有办法延迟脚本的其余部分,直到ajax调用执行完毕?
UPDATE 作为aorlando指出,控制台输出的顺序标志着我需要添加async: false
我的$就调用。这样做后,控制台输出是正确的,但函数CheckFileExists()仍然报告为beforeSubmit中未定义。
这样做!感谢一百万,奥兰多! – marky 2013-05-07 17:37:01