尝试通过iFrame发布表单时出现此错误。在IE 8中,在FF和Opera中工作正常。
问题的简短版本是:我有一个复杂的形式,我使用JavaScript变成一个复杂的json对象,然后我把它变成一个json字符串。我在页面中添加一个表单,其中包含json字符串的隐藏字段,文件的克隆控制并提交具有我的iframe目标的表单。
这是我的测试代码:
<div id="testingFormHolder">
<form id="IFrameSubmitForm">
<input type="text" id='testText' name='testText' />
<input type="file" id='testFile23' name='testFile' cfid="23" />
<input type="file" id='testFile24' name='testFile' cfid="24" />
<input type="button" id='testSubmit' name='testSubmit' />
</form>
</div>
<div id="TempFormHolder">
</div>
<div id="IFrameHolder" class="">
</div>
<script type="text/javascript">
$(function () {
$('#testSubmit').click(function () {
var fileControls = $('#testingFormHolder').find('input[type=file]');
var otherDataObject = { "field1": 'blah blah field 1', "field2": "field2" };
var iframe = $('<iframe name="theIFrame" id="theIFrame" class="" src="about:none" />');
var theFileNames = new Array();
var thefiles = $('#testingFormHolder').find('input[type=file]');
thefiles.each(function () {
theFileNames.push({ cfid: $(this).attr('cfid'), FileName: $(this).val() });
});
otherDataObject.fileNames = theFileNames;
var otherData = JSON.stringify(otherDataObject);
$('#IFrameHolder').empty().append(iframe);
var theForm = $('<form id="TempForm" name="TempForm">');
fileControls.each(function () {
theForm.append($(this).clone().attr('name', 'files').attr('id', $(this).attr('customFieldId')));
});
// theForm.append(fileControl.clone().attr('name', 'files').attr('id', 'file1'));
theForm.append($("<input type='text' id='model' name='model' value='" + otherData + "' />"));
theForm.attr('action', '<%= Url.Action(MVC.Temp.Actions.TestingFormSubmitThroughIFrame)%>');
theForm.attr('method', 'POST');
theForm.attr('enctype', 'multipart/form-data');
theForm.attr('encoding', 'multipart/form-data');
theForm.attr('target', 'theIFrame');
$('#TempFormHolder').empty().append(theForm);
theForm.submit();
// $('#theIFrame').load(function () {
// });
return false;
});
});
</script>
我正在使用asp.net mvc。当我在寻找答案的时候,我遇到了一个关于混合http和https的页面,但我只是用本地主机运行它。测试页面的地址是: http://localhost:60819/Temp/Testing/ 和'&lt;%= Url.Action(MVC.Temp.Actions.TestingFormSubmitThroughIFrame)%&gt;' =“/ Temp / TestingFormSubmitThroughIFrame”
编辑:并将操作更改为完整地址而不仅仅是“/ Temp / TestingFormSubmitThroughIFrame”没有修复它。
感谢您的帮助!
编辑:对不起,我认为它复制了整个错误消息!完整的错误消息是:
“导航到网页已被取消” “你能尝试什么: 重新输入地址。
“
在尝试提交时出现在我的iframe中。它甚至没有尝试发布帖子。
答案 0 :(得分:-1)
好吧,我切换到使用jquery.form插件,它似乎工作!我不确定它的做法有何不同。但我会建议任何人,这很容易使用!我不知道为什么我最初没有使用它!
以下是代码现在的样子:
<script type="text/javascript">
$(function () {
$('#testSubmit').click(function () {
var fileControls = $('#testingFormHolder').find('input[type=file]');
var otherDataObject = { "field1": 'blah blah field 1', "field2": "field2" };
var theFileNames = new Array();
fileControls.each(function () {
theFileNames.push({ CustomFieldId: $(this).attr('customFieldId'), FileName: $(this).val() });
});
otherDataObject.cfNames= theFileNames;
var otherData = JSON.stringify(otherDataObject);
$('#TempFormHolder').empty();
var theForm = $('<form id="TempForm" name="TempForm" action="http://localhost:60819/Temp/TestingFormSubmitThroughIFrame" />').appendTo('#TempFormHolder');
fileControls.each(function () {
theForm.append($(this).clone().attr('name', 'files'));
});
theForm.append($("<input type='text' id='model' name='model' value='" + otherData + "' />"));
theForm.ajaxSubmit({ target: '#ResultTarget' });
return false;
});
});
</script>
希望将来帮助某人。