我使用jQuery Form Plugin和 APE comet 服务器,并且在使用 iframe 上传文件时遇到了同样的问题。这是我的解决方案(使用静态 iframe 而不是动态 iframe):
将以下代码添加到在启动 APE 之前加载的页面:
<iframe id="file_upload_iframe" name="file_upload_iframe" src="iframe_src.html" style="position: absolute;left: -300px;top:-300px; width:0px;height:0px;"></iframe>
将页面 iframe_src.html(静态 iframe 的初始源)添加到站点:
<html>
<head>
</head>
<body>
<script type="text/javascript">
document.domain = document.domain; <!-- this is the main line -->
</script>
</body>
</html>
此页面的目的是允许表单插件进行初始表单提交,避免权限错误。
应用程序应以下列方式返回响应:
<html>
<head></head>
<body>
<script type="text/javascript">document.domain = document.domain;</script>
<textarea>' + YOUR_DATA_TO_RETURN + '</textarea>
</body>
</html>
这是为了避免在第二次和进一步的表单提交时出现权限被拒绝错误。
客户端表单提交代码:
$('#image_add_commit').click(function(){
$('#file_upload_iframe').unbind();//may be it is unnecessary
$('#image_add_form').ajaxSubmit(
{success: image_add_complete,
iframe: true,
iframeTarget: $('#file_upload_iframe').get(0),
dataType: 'html',
textarea: true});
});
function image_add_complete(data){
//data variable contains YOUR_DATA_TO_RETURN that was wrapped in HTML code
}
jquery.form.js 文件中的修改:
查找块
if (!s.iframeTarget) {
// add iframe to doc and submit the form
$io.appendTo('body');
if (io.attachEvent)
io.attachEvent('onload', cb);
else
io.addEventListener('load', cb, false);
}
并将其更改为
if (!s.iframeTarget) {
// add iframe to doc and submit the form
$io.appendTo('body');
}
if (io.attachEvent)
io.attachEvent('onload', cb);
else
io.addEventListener('load', cb, false);
(这只是将第二个花括号向上移动)