我正在尝试让SWFUpload正确地将图像上传到我的服务器,以及图像必须附带的其他帖子数据。有一个表单可以填充数据,因此在用户单击浏览按钮并选择其图像文件后,图像不会立即上传。它保留在队列中,直到用户单击发送按钮,然后我调用mySwfUploadInstance.startUpload()以便上载开始。
但它在函数'callFlash'中的swfupload.js第452行失败了:
Uncaught Call to ReturnUploadStart failed
抛出此错误之前捕获的异常如下:
Object #<HTMLObjectElement> has no method 'CallFunction'
在以下函数中:
SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
argumentArray = argumentArray || [];
var movieElement = this.getMovieElement();
var returnValue, returnString;
// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
try {
returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
returnValue = eval(returnString);
} catch (ex) {
throw "Call to " + functionName + " failed";
}
// Unescape file post param values
if (returnValue != undefined && typeof returnValue.post === "object") {
returnValue = this.unescapeFilePostParams(returnValue);
}
return returnValue;
};
movieElement看起来像是一个有效的flash对象。
如果我在初始化SWFUpload时传递给file_dialog_complete_handler的函数中调用startUpload(),则不会出现错误:
function ImageFileDialogComplete(numFilesSelected, numFilesQueued)
{
try
{
this.startUpload();
}
catch (ex)
{
this.debug(ex);
}
}
我真的需要能够在用户完成表单并单击发送按钮时推迟上传。
当我从对话框完成处理程序中调用startUpload()时,知道SWFUPload有什么问题吗?
答案 0 :(得分:14)
似乎问题是因为我在调用startUpload()之前通过设置display:none来隐藏包含flash对象的div。我这样做是为了隐藏表单并显示带有进度条的div。
由于某种原因,flash对象必须在屏幕上保持可见,否则对其进行的所有调用都将失败。