繁体   English   中英

通过 XMLHTTPRequest 发送数据在网络服务器上不起作用

[英]Sending Data via XMLHTTPRequest does not work on Webserver

我正在尝试通过 XMLHTTPRequest 从网络服务器上的 html 文件向 Node Express 服务器发送一些关于用户的数据(在本例中只是名字和姓氏)。 它在本地服务器上运行良好,我只是无法让它在网络服务器上运行。 这是我的 html 的关键部分:

    <br>
        <div class="textbold">First Name</div>
        <input name="fn" id= "first"><p>
        <div class="textbold">Last Name</div>
        <input name="ln" id="last"><p>
    <br>
        <input type="button" class="button" onclick="request()" value="Send"> 

<script>
function request() {
    var firstname = document.getElementById("first").value
    var lastname = document.getElementById("last").value

    var xhr = new XMLHttpRequest()
    xhr.open('GET', "http://urlofmywebbrowser.com/request")
    xhr.setRequestHeader("Content-Type", "multipart/form-data");
    xhr.send("firstn="+firstname+"&lastn="+lastname)
}
</script>

这是快递服务器的脚本:

var express = require('express')
var app = express()
var port = 3000

app.get("/request", function (req) {
    let firstname = req.query.firstn
    let lastname = req.query.lastn
    console.log(vorname, nachname)})

然后脚本继续将数据保存到 json 文件中,该文件在我的本地服务器上再次正常工作,但我无法在网络服务器上对其进行测试。 我认为可能的错误可能与 URL 或端口号有关,但我尝试了各种组合,但无法正常工作。 在此先感谢您的帮助!

HTTP 请求可以包含以下数据:

  • URL 的查询字符串
  • 身体

如果您正在发出 GET 请求,那么它必须在 URL 的查询字符串中包含 go。

您正在将它传递给send() ,后者将其放入正文中。 这是不允许的,因此将被忽略。


如果将它放在正文中(这意味着更改为 POST 请求),则需要使Content-Type与您正在使用的数据格式相匹配。

您正在使用application/x-www-form-urlencoded但声称您正在发送multipart/form-data


如果你把它放在正文中(见上文),那么 Express 要求你从req.body而不是req.query中读取它。

它还需要您添加合适的正文解析中间件。


您需要不要忘记"结束字符串文字


您不应该将字符串混合在一起来构造数据格式。 这无法处理输入中的特殊字符。 使用将为您构建它们的 API。


修复

假设您正在尝试发出 GET 请求:

删除xhr.setRequestHeader("Content-Type", "multipart/form-data");

xhr.send("firstn="+firstname+"&lastn="+lastname)更改为xhr.send()

改变:

xhr.open('GET', "http://urlofmywebbrowser.com/request")

const url = new URL("http://urlofmywebbrowser.com/request");
url.searchParams.append("firstn", "firstname");
url.searchParams.append("lastn", "lastname");
xhr.open('GET', url);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM