【发布时间】:2011-04-12 08:48:01
【问题描述】:
我正在尝试使用“AJAX”上传文件,处理文件中的数据,然后将部分数据返回到 UI,以便我可以动态更新屏幕。
我正在使用 JQuery Ajax 表单插件,在 http://jquery.malsup.com/form/ 找到的 jquery.form.js 用于 javascript,并在后端使用 Django。表单正在提交并且后端的处理没有问题,但是当从服务器收到响应时,我的 Firefox 浏览器提示我下载/打开类型为“application/json”的文件。该文件包含我一直试图发送到浏览器的 json 内容。
我不认为这是我如何发送 json 的问题,因为我有一个模块化的 json_wrapper() 函数,我在同一个应用程序的多个地方使用它。
这是应用 Django 模板后我的表单的外观:
<form method="POST" enctype="multipart/form-data" action="/test_suites/active/upload_results/805/">
<p>
<label for="id_resultfile">Upload File:</label>
<input type="file" id="id_resultfile" name="resultfile">
</p>
</form>
您不会看到任何提交按钮,因为我在其他地方使用按钮调用提交,并且正在使用 jquery.form.js 插件中的 ajaxSubmit()。
这里是控制 javascript 代码:
function upload_results($dialog_box){
$form = $dialog_box.find("form");
var options = {
type: "POST",
success: function(data){
alert("Hello!!");
},
dataType: "json",
error: function(){
console.log("errors");
},
beforeSubmit: function(formData, jqForm, options){
console.log(formData, jqForm, options);
},
}
$form.submit(function(){
$(this).ajaxSubmit(options);
return false;
});
$form.ajaxSubmit(options);
}
如您所见,我已经迫不及待地想看到成功回调函数工作,并且只是在成功时创建了一条警报消息。然而,我们从来没有接到那个电话。另外,error 函数没有被调用,beforeSubmit 函数被执行。
我取回的文件内容如下:
{"count": 18, "failed": 0, "completed": 18, "success": true, "trasaction_id": "SQEID0.231"}
我在这里使用“成功”来表示服务器是否能够充分运行 post 命令。如果失败,结果将类似于:
{"success": false, "message":"<error_message>"}
非常感谢您的时间和帮助。我已经在这方面花了几天时间,很想继续前进。
【问题讨论】:
-
error调用是否执行?还是beforeSubmit?检查 firebug 或 chrome 中的实际响应也会有所帮助,以了解实际返回的内容。 -
不,错误调用不会执行,但 beforeSubmit 会执行。我们还知道在提交之前一切正常,因为服务器端处理运行正常。
-
@Michael - 您在 firebug/chrome/fidler 网络面板中看到了什么响应?
-
@Nick - [Object { name="resultfile", more...}] [form /test_su...lts/805/] Object { url="/test_suites/active/upload_results/ 805/",更多...} 这些元素中的每一个都是可切换的(我正在使用 Firebug btw)哦,为了澄清起见,上面的所有代码基本上都是从头开始编码的。没有剪切和粘贴,以防万一。
-
@Michael - 你能在你的问题中发表完整的回复吗?这似乎不是有效的 JSON,这会导致解析器失败。
标签: jquery django forms file-upload