JQuery Ajax请求无法到达服务器

时间:2016-12-27 11:18:48

标签: javascript jquery ajax

我编写了以下函数,该函数应该从浏览器发送一个AJAX POST请求:

function addFormToDB(email, company, subject, text) { 
   var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text;
   $.ajax({
      url: 'http://127.0.0.1/submit',
      type: 'POST',
      data: '{"data":"' + params + '"}' ,
      xhrFields: {
         withCredentials: false
      },
      dataType: "jsonp",
      contentType: 'text/plain',
      success: function(data) {
         alert("success");
      },
      error: function(result) {
         alert("error");
      }
   });

}

在服务器端(node.js + express),我有以下处理POST请求的函数:

app.post('/submit', function(req, res) {
    console.log("enter function");
    var p = new Promise(function(resolve, reject) {
        db.serialize(function() {
            db.run("INSERT INTO users VALUES (?, ?, ?, ?)",
            [req.query['email'], req.query['company'], req.query['subject'], req.query['text']],
            function (err) {
                if (err) {
                    console.error(err);
                    reject();
                } else {
                    console.log("Transaction passed");
                    resolve();
                }
            });
        });
    });
    p.then(function(){
        res.status(200).send();
    }).catch(function() {
        res.status(400).send();
    })
});

我不知道为什么但是当发送POST请求时,没有任何反应,程序也没有输入POST请求的功能。控制台没有说什么。

这就是'网络'窗口看起来: enter image description here

我理解404错误代码意味着路由存在问题。但是,当客户端代码是这个(没有JQuery)时,它工作正常:

var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text;
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", "http://127.0.0.1:3000/submit?" + params, true);
    xhttp.onreadystatechange = function() {
        console.log(xhttp.readyState + " " + xhttp.status);
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            console.log("request " + params + " was sent to DB");
            alert("Thank You!");
        }
    };
    xhttp.send();

两个代码段中的路径都是相同的:http://127.0.0.1/submit,所以可能问题不在于路径。

你知道这是什么问题吗?

3 个答案:

答案 0 :(得分:1)

您的问题是您正在进行JSON请求,这是一个GET请求。你不能制作一个POST的JSONP。查看截图中的请求,您可以看到它是一个GET。

dataType: "jsonp",   <-- changes the POST to a GET

JSONP的工作方式是在页面上粘贴<script>标记,这样就可以获得GET。所以最后Ajax和普通的JavaScript不一样。简单的JavaScript是将脚本标记附加到页面。

答案 1 :(得分:0)

它的用途是什么?

var params = "email=" + email + "&company=" + company + "&subject=" + subject + "&text=" + text
...
data: '{"data":"' + params + '"}' ,

试试吧

data: { email: email, company: company, subject: subject, text: text }
Node.js中的

req.param['email'] ... etc

答案 2 :(得分:0)

试试这个(需要删除jsonp和数据):      功能addFormToDB(电子邮件,公司,主题,文本){

   $.ajax({
      url: 'http://127.0.0.1/submit',
      type: 'POST',
      data: {email: email, company: company, subject: subject} ,
      xhrFields: {
         withCredentials: false
      },
      success: function(data) {
         alert("success");
      },
      error: function(result) {
         alert("error");
     }
   });

}