Possible Duplicate: Pause form submission for validation
可能重复:暂停表单提交以进行验证
It's a continuation of this post. So basically I'm uploading a file in an iframe. But before submitting, I grab data from the form and using django's built-in system check their validity (currently it's just a dummy function that takes foo: bar, and returns json result = "true" ). I use two buttons - fake visible, that calls validation and second - hidden, that submits the form. With the code below I'm able to perform validation, then when it's result is positive form is submitted. Now if I hardcode target for form, my alert is not shown and I'm pretty sure that the upload is not performed (unfortunately list of uploads is refreshed each 8h so I'll know if it worked in some time). If the target is not specified, file is uploaded with redirect so the whole 'submit' event listener is omitted. What more, tho whole code doesn't work at all in Chrome. And it takes like 2-3s (looking at firebug) between receiving response from validation, and displaying it which I've never seen before. I'm really desperate on making it work, since I've already wasted 2 days and without any results.
这是这篇文章的延续。所以基本上我是在iframe中上传文件。但在提交之前,我从表单中获取数据并使用django的内置系统检查它们的有效性(目前它只是一个虚函数,需要foo:bar,并返回json result =“true”)。我使用了两个按钮 - 假可见,调用验证,第二个 - 隐藏,提交表单。使用下面的代码,我能够执行验证,然后当它的结果是肯定的形式提交。现在,如果我对表单的目标进行硬编码,我的警报就不会显示,而且我很确定没有执行上传(不幸的是,上传列表每8小时刷新一次,所以我知道它是否在一段时间内有效)。如果未指定目标,则使用重定向上载文件,以便省略整个“submit”事件侦听器。更重要的是,整个代码在Chrome中根本不起作用。在接收验证响应和显示我之前从未见过的响应之间需要2-3s(查看firebug)。我真的很想让它发挥作用,因为我已经浪费了2天而且没有任何结果。
Sample link:
示例链接:
http://ntt.vipserv.org/artifact/
http://ntt.vipserv.org/artifact/
JS:
JS:
html:
HTML:
Submit
{% render_upload_data upload_data %}
{{ form }}
EDIT:
编辑:
IE's debugger shows Object doesn't support this property or method for:
because of using addEventListener, but no more errors. Firebug is clean. In Chrome :
因为使用了addEventListener,但没有更多的错误。萤火虫很干净。在Chrome中:
"Failed to load resource" at check-form. This is interesting, since the result at .../check-form/ is :
检查表单中的“无法加载资源”。这很有趣,因为... / check-form /的结果是:
{
message: "RespOnse= True"
result: "true"
}
so looks fine to me. Tried also data.message instead of data["message"] but nothing changes.
所以看起来很好。尝试了data.message而不是数据[“message”],但没有任何变化。
2 个解决方案
#1
1
Maybe a little bit of an annoying solution, but that's the joy of working with Javascript. Leave the communication between browser and server completely up to Javascript, and not to HTML. Meaning:
When you write your HTML, leave out the action; change the submit buttons to regular buttons.
编写HTML时,请忽略该操作;将提交按钮更改为常规按钮。
Run validation via ajax (as is done now), and if the validation is successful call a new function which will manage the form submition.
通过ajax运行验证(如现在所做),如果验证成功,则调用一个新函数来管理表单子目录。
This form-submitting function will display the message you wanted, and after that will add the action to the form, and will run form.submit();
此表单提交功能将显示您想要的消息,然后将该操作添加到表单,并将运行form.submit();
Hope this helps
希望这可以帮助
#2
0
Look, you don't have to use fileUploadForm.addEventListener("submit", function (){...}, false). This is exactly what $(fileUploadForm).submit(function (){...}) does, and it has the advantage of working across all browsers.