【发布时间】:2021-06-22 14:38:58
【问题描述】:
所以我正在尝试从 Javascript 发布到我的服务器 (php),并且尝试不使用 JQuery。
此代码工作并将必要的数据发布到数据库
var msg = {};
msg['name'] = 'joe';
msg['message'] = 'why no work';
$.post(phpURL, msg, function(data) {});
但是这个没有
var xhr = new XMLHttpRequest();
xhr.open("POST", phpURL, true);
xhr.send(msg);
我什至查看了我的 php 日志,查看了标头,我能看到的 JQuery 与 XHR 的唯一区别是内容类型标头 "application/x-www-form-urlencoded; charset=UTF-8" 和此标头 "x-requested-with" "XMLHttpRequest"。
所以我尝试了以下标题的所有组合。
var xhr = new XMLHttpRequest();
xhr.open("POST", phpURL, true);
//xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
//xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
xhr.send(msg);
没有效果。
值得一提的是,如果我尝试在任何地方添加JSON.stringify(msg),它不起作用,无论是在 JQuery 还是在 XHR 中。但我想先让这个工作,并解释这个奇怪的差异。
我倾向于认为这是一个 Javascript 问题,因为 JQuery 帖子有效,此外,服务器的 GET 请求和我尝试发布到的同一个表也有效。
【问题讨论】:
-
在发送原生 XHR 时,您已将要发送的数据格式化为
application/x-www-form-urlencoded格式,jQuery 会自动为您完成。 -
上面那个线程讨论了数据格式
-
是的,谢谢你们,你们是对的。如果我将味精更改为 'name=bla&message=ble' 它确实有效。我想以 JSON 格式发送,因为我需要发送 utf8,但我想这将是另一个问题。
-
JSON 不是编码类型。如果要发送 JSON,则需要设置
Content-Type', 'text/plain; charset=UTF-8'标头。在这种情况下,服务器上的数据读取与传统处理不同。 -
如前所述,“服务器上的数据读取不同于传统的”。使用
file_get_contents('php://input');读取值。它会将 JSON 作为字符串返回给您(前提是您发送了一个字符串化对象)。
标签: javascript jquery post xmlhttprequest