2016-02-01 223 views
2

我试图做一个非常简单的程序,它将变量发送到服务器,然后写出来。AJAX POST请求中的HTTP错误400

根据Opera的说法,它会在Display()的末尾得到一个HTTP 400(Bad Request)。

.jade文件

button(type='button', onclick='Display()') Display data 

#modify 
    p Lorem ipsum Display 

script 
    include main.js 

main.js

function Display(){ 

    var xhttp = new XMLHttpRequest(); 
    var parameter = { "Name": "Katamori" }; 

    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      document.getElementById("modify").innerHTML = xhttp.responseText; 
     } 
    }; 

    xhttp.open("POST", "displayer.js", true); 
    xhttp.setRequestHeader("Content-type", "application/json"); 

    xhttp.send(parameter); 

}; 

displayer.js

function (req, res) { 
    if (req.method == 'POST') { 
     var jsonString = ''; 

     req.on('data', function (data) { 
      jsonString += data; 
     }); 

     req.on('end', function() { 
      console.log(JSON.parse(jsonString)); 
     }); 

     req.on('error', function() { 
      console.log("ERROR!"); 
     }); 
    } 
} 

我试图改变parameter从JSON到简单的文本(也有RequestHeader),在这种情况下,我得到了一个HTTP 404错误。

这是什么原因以及什么是正确的解决方案?

+1

你有没有试过记录'xhttp.responseText'? –

+1

An *算法*是解决抽象问题的一系列步骤(例如,在字符串中搜索)。它通常作为纸上的文字描述而存在。你想创建的是一个程序。 – Tomalak

+0

@尚未;我唯一能想出的就是它在HTTP错误400的情况下显然没有价值。 –

回答

4

您还没有发送JSON,序列化数据到JSON和发送

xhttp.send(JSON.stringify(parameter)); 
+0

它仍然抛出一个404,在相同的地方。 –

+1

发布你的路由代码,我猜你还没有设置名为'displayer.js'的路由 – Musa

+0

你说得对,我不认为这是必要的,因为'displayyer不是一个访问的网站,不像一个包含'main.js' - 我想我应该修复它。 –

1

或者你甚至可以用另一种方式发送,如下图所示:

function display(){ 

    var http = new XMLHttpRequest(); 
    var params = "name=Katamori"; 

    http.onreadystatechange = function() { 
     if (http.readyState == 4 && http.status == 200) { 
      document.getElementById("modify").innerHTML = http.responseText; 
     } 
    }; 

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.open("POST", "/", true); 
    http.send(params); 

} 

服务器端代码

app.post("/", function(req, res){ 
    var jsonString = ''; 
    req.on('data', function (data) { 
     jsonString += data; 
    }); 

    req.on('end', function() { 
     console.log(jsonString); // name=Katamori 
    }); 
}); 

w3schools

它适合我。

谢谢,我希望它能帮助你

+0

'拒绝设置不安全的标题“内容长度”'并且在main.js末尾还有一个404 - 我想你的意思是'xhttp'而不是'http',或者不是? –

+0

@ZoltánSchmidt我已经更新了我的答案。 –

+0

哦,谢谢!它看起来好多了,虽然它仍然抛出一个错误 - “InvalidStateError:'在'XMLHttpRequest'上执行'setRequestHeader'失败:该对象的状态必须为OPENED.' –