我正在使用来自http://www.phpletter.com/Demo/AjaxFileUpload-Demo/的 AjaxFileUpload 插件。
我正在尝试从 Jqgrid 中的表单编辑框上传文件。由于我在一个编辑表单(Jqgrid 表单编辑)中进行文件上传,它还会更新其他字段,我将对AjaxFileUpload函数的调用链接到 Jqgrid 上的beforeSubmit事件。这使我能够在提交其他表单数据之前将来自 AjaxFileUpload 的响应返回给 Jqgrid。因此,如果文件上传出错,我可以将错误返回给 Jqgrid,它不会提交表单。(只有文件上传成功才会提交表单。)
但是,为了使上述内容正常工作,我需要 AjaxFileUpload 同步工作,而不是默认异步工作。我设置了 async:false 但它似乎仍在异步工作。我知道这一点是因为如果在 Firebug 中我向成功函数和错误函数添加断点(以便执行暂停几秒钟以完成文件上传),那么一切都按预期工作 100%。但是,当我删除断点以便实时执行时,成功或错误函数返回的响应仍未定义。
如何使 AjaxFileUpload 同步运行?我的代码摘录如下:
function ajaxFileUpload(formid)
{
var uploadresponse = [false, "by default"];
$.ajaxFileUpload(
{
url:'EditData.aspx?MyIdentifier=' + $("#MyIdentifier").val(),
secureuri:false,
fileElementId:'filename',
dataType: 'JSON',
data: {id: formid},
async:false,
success: function (dataIn, status)
{
var errorResponse = $.parseJSON(dataIn);
if((errorResponse != null)&&(typeof(errorResponse.error) != 'undefined'))
{
if(errorResponse.error != '')
{
uploadresponse = [false, errorResponse.explanation];
}
}
else
{
uploadresponse = [true, "Successfully uploaded file"];
}
},
error: function (datain, status, e)
{
uploadresponse = [false, e];
}
}
);
return uploadresponse;
}
(在上面的代码中,如果我没有设置断点,那么 uploadresponse 中的响应始终是 [false, "by default"] 但如果我设置了断点,则根据成功和错误函数正确设置了 uploadresponse。)