【发布时间】:2014-05-02 10:28:27
【问题描述】:
请帮助大家,这是一个主要的 BLOCKER!
我有一个使用 NodeJS + jQuery Form Plugin + Typescript 的项目,我正在尝试上传文件。文件上传后,服务器向屏幕上呈现的 POST 消息发送响应。该文件确实在 POST 响应呈现在屏幕上之前成功且完整地上传。我希望 POST 响应调用“成功”函数,而不是重定向页面以显示 JSON 响应。
代码如下:
$(new ID().setAsRoot().selectId()).append(
"<form id=\"fileUploadForm\" accept-charset=\"utf-8\" method=\"post\" action=\"/upload\" enctype=\"multipart/form-data\">" +
"<input id = \"filename\" type=\"file\" name=\"userfile\" multiple=\"multiple\" />" +
"<button type=\"submit\" id = \"submitButton\"> Upload </button></form>");
var form = $("#fileUploadForm");
form.submit(function (e) {
//e.preventDefault();
this.ajaxSubmit({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize(),
success: function (data) {
var x = JSON.parse(data);
alert("Success : " + x);
},
error: function (data) {
var x = JSON.parse(data);
alert("Error : " + x);
}
});
});
没有调用成功函数(这意味着不显示警报消息)。 JSON 数据会像这样在屏幕上呈现:
{
"path": "data\\cb3409f1cc234ec3f64b60d80be13a3e.html",
"name": "feed.html"
}
控制台出现错误提示:
Uncaught SyntaxError: Unexpected token : shortcut_manager.js:123
(anonymous function) shortcut_manager.js:123
(anonymous function) extensions::messaging:327
Event.dispatchToListener extensions::event_bindings:386
Event.dispatch_ extensions::event_bindings:371
Event.dispatch extensions::event_bindings:392
dispatchOnMessage
这是处理它的服务器端代码。服务器使用NodeJS强大的模块。
public upload(req:express.Request, res) {
var form = new formidable.IncomingForm();
var originalFileName:String;
var filePath:String;
form.uploadDir = this.directory;
form.keepExtensions = true;
form.type = 'multipart';
var fields = [];
form
.on("error", function (err) {
})
.on("field", function (field, value) {
})
.on("end", function () {
res.send({
path: filePath,
name: originalFileName
});
})
.on("file", function (name, file:formidable.File) {
originalFileName = file.name;
filePath = file.path;
});
form.parse(req);
return;
}
--更新--
如果我使用$.ajax 而不是this.ajax。文件不上传。浏览器控制台显示错误:
XMLHttpRequest cannot load http://localhost/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
【问题讨论】:
-
您不必在响应中添加状态码吗?
-
在 POST 响应中添加了状态代码 - 仍然无法正常工作 - 请参阅上面的更新代码。谢谢
-
好的,抱歉,这只是一个快速的想法。另一种是:在您的
submit回调中使用$(this)而不是this。我感觉您正在访问 HTML 元素。顺便说一句,您在开发者控制台中是否遇到任何错误? -
你指的是来自“this.ajaxSubmit()”的“this”。那不是回调。如果我用 $(this) 替换它,IDE 会抛出错误:“参数类型与参数不匹配”。谢谢。
-
听起来表单提交正常。您是否在控制台中收到任何错误?我也认为是
$.ajax而不是this.ajax。
标签: jquery post jquery-forms-plugin