jQuery的Ajax回调在文件上传后没有触发

时间:2013-08-21 16:48:57

标签: node.js jquery express

我有一个相对简单的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);

文件上传成功,一切似乎都在服务器端正常工作。

但是,在前端,没有任何警报被触发,因此我无法响应来自服务器的任何新数据。还有一些我缺少的额外步骤吗?

1 个答案:

答案 0 :(得分:0)

原来这是两个问题的组合:

1)评论中指出的jQuery正在中止。

2)因为jQuery被取消了,所以它并没有阻止相关的HTML表单正常提交。

这种组合意味着表单会成功提交和接收响应,但由于jQuery代码无声地失败,因此没有收到回调。