我有一个相对简单的ajax调用,它将文件从输入表单上传到服务器:
$(function(){
$("form").submit(function(){
var infile = $('#pickedfile');
var actFile = infile[0].files[0];
$.ajax(
{
type: "POST",
url: "http://localhost:3000/file_upload",
data: [
{
file: actFile
}],
dataType: 'text',
success: function ()
{
alert("Data Uploaded");
},
beforeSend: function ()
{
alert("Before Send");
return false;
},
error: function ()
{
alert("Error detected");
},
complete: function ()
{
alert("Completed");
}
});
});
});
我有一个成功接收该文件的node.js服务器,并报告回来:
var express = require('express'),
wines = require('./routes/testscripts');
var app = express();
app.configure(function(){
app.use(express.bodyParser());
app.use(app.router);
});
app.post('/file_upload', function(req, res) {
//file should be in req.files.pickedfile
// get the temporary location of the file
// undefined if file was not uploaded
var tmp_path = req.files.pickedfile.path;
res.send("Hello, this is server");
});
});
app.listen(3000);
文件上传成功,一切似乎都在服务器端正常工作。
但是,在前端,没有任何警报被触发,因此我无法响应来自服务器的任何新数据。还有一些我缺少的额外步骤吗?
答案 0 :(得分:0)
原来这是两个问题的组合:
1)评论中指出的jQuery正在中止。
2)因为jQuery被取消了,所以它并没有阻止相关的HTML表单正常提交。
这种组合意味着表单会成功提交和接收响应,但由于jQuery代码无声地失败,因此没有收到回调。