1

我正在使用来自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。)

4

0 回答 0