使用 XMLHttpRequest 不使用 jQuery 将 JSON 数据发送到 PHP

2024-04-20

我正在尝试使用 XMLHttpRequest 对象从表单发送 JSON 数据。我可以使用以下函数发送数据。 FireBug 中没有显示任何错误,并且 FireBug 可以很好地显示请求中的 JSON 数据。

但是,我将数据发送到echo.php,什么简单地返回内容:

<?php
print_r($_POST);
print_r($_GET);
foreach (getallheaders() as $name => $value) {
    echo "$name: $value\n";
}
echo file_get_contents('php://input');
?>

POST 数组始终为空,但我可以看到返回的 JSON 字符串file_get_contents。这是怎么发生的?我究竟做错了什么?

echo.php 的输出

Array
(
)
Array
(
)
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: eo,de-de;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Referer: http://localhost/form.html
Content-Length: 88
Cookie: {{..to much data..}}
Pragma: no-cache
Cache-Control: no-cache
{"type":"my_type","comment":"commented"}

发送函数:

function submit(){
    var data={};
    data.type=document.form.type.value;
    data.comment=document.form.comment.value;

    //get right XMLHttpRequest object for current browsrer
    var x=ajaxFunction();

    var string = JSON.stringify(data);

    x.open('POST','echo.php',true);
    x.setRequestHeader('Content-type','application/json; charset=utf-8');
    x.setRequestHeader("Content-length", string.length);
    x.setRequestHeader("Connection", "close");

    x.onreadystatechange = function(){
        if (x.readyState != 4) return;
        if (x.status != 200 && x.status != 304) {
            alert('HTTP error ' + req.status);
            return;
        }

        data.resp = JSON.parse(x.responseText);
        if(data.resp.status=='success'){
            alert('That worked!');
        }else{
            alert('That didn\'t work!');
        }
    }
    x.send(string);

    return false; //prevent native form submit
}

PHP 不会像处理表单编码或多部分请求那样自动处理 JSON 请求。如果您想使用 JSON 向 PHP 发送请求,那么您基本上可以使用 file_get_contents() 正确完成此操作。如果您想将这些变量合并到全局 $_POST 对象中,您可以这样做,但我不建议这样做,因为这可能会让其他开发人员感到困惑。

// it's safe to overwrite the $_POST if the content-type is application/json
// because the $_POST var will be empty
$headers = getallheaders();
if ($headers["Content-Type"] == "application/json")
    $_POST = json_decode(file_get_contents("php://input"), true) ?: [];

快速注意:您不应该使用 application/json 的 Content-Type 发送字符集。这只能与 text/* 内容类型一起发送。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XMLHttpRequest 不使用 jQuery 将 JSON 数据发送到 PHP 的相关文章

  • 使用 Curl 登录 meetup.com

    我正在尝试自动登录 www meetup com 但没有成功 这是我的代码
  • HTML/PHP if-else 语句

    我正在使用 Bootstrap 创建一个网站 我想输入 if else 语句 但我不知道该怎么做 让我解释 Here is an image of my current HTML snippet 现在我想要的是 如果我通过 An Aussc
  • 如何应对本地化?我应该遵循一个标准吗?

    我正在尝试创建一组类来处理本地化 主要是货币部分 但也包括语言 我可以想象其中的逻辑 但我不知道不同的语言和货币使用什么名称 我看到有很多 ISO 标准 我应该选择哪一个 不管怎样 这是我想到的逻辑 以防你也能帮忙解决这个问题 我会有一个
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 jq 将两个 JSON 数组合并到一个文件中

    我有一个包含两个数组的 JSON 文件 我想将数组组合成一个对象数组 每个对象都包含每个原始数组中的一个元素 JSON 输入如下所示 en E1 E2 E3 E4 fr F1 F2 F3 F4 期望的输出 en E1 fr F1 en E2
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • Logback 附加程序将消息作为 HTTP 消息发布

    根据我的要求 我只想将 HTTP 消息发布到另一端 该消息由org slf4j LoggerFactory getLogger 以下 JSON 字符串记录在INFO level studentName My Name Deratment C
  • 如何在 Mac 上更改 PHP-FPM 端口

    我没有使用 php 或 php fpm 但它占用了端口 9000 我需要端口 9000 我想更改端口 我把它改成了 etc php fpm conf and etc php fpm d www conf 听 127 0 0 1 9005 仍
  • 如果 WooCommerce 购物车商品缺货,请勿使用优惠券

    到目前为止 这就是我所得到的 add filter woocommerce coupon is valid coupon always valid 99 2 function coupon always valid valid coupon
  • 尝试在 Windows 上执行 package.json 中的脚本会引发 JScript 错误

    所以我正在尝试构建 javascriptair site 在 的里面package json有一个 npm 脚本指向 javascript 命令 package scripts 找到该存储库https github com kentcdod
  • 如何在D3中导入json数据?

    如何在D3中导入json文件 I did d3 json temp json 但是我如何在进一步的代码中访问这个数据集呢 到目前为止我已经尝试过 var data d3 json temp json 但使用 data data 在其余代码中
  • 这段php代码安全吗?

    我知道我应该使用准备好的语句 但我的下一个项目将使用准备好的语句 我只需要完成这个简单的小应用程序 所以我的问题是 以下代码片段安全吗 我使用了 htmlentities 以及 mysql real escape string 因为我认为这
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • 尝试使用 fopen() 将文件写入不同的目录

    我正在尝试将文件从一个目录写入另一个目录 例如 http www xxxxxxx com admin upload php http www xxxxxxx com admin upload php to http www xxxxxxx
  • 当与不需要虚拟机的编译程序一起使用时,CGI 是否仍然很慢?

    当我学习 CGI 时 我了解到任何编程语言都可以用来将其输出挂钩到 http 响应消息 而它的输入是 http 请求消息 我读过的很多文章都在 Perl 的背景下讨论 CGI 这是因为 Perl 是与 CGI 结合使用的最常见的语言吗 我想
  • 使用 Composer 安装 PHPUNIT

    我有一个关于 Symfony 2 的项目 我想在 Windows 7 上使用 PHPUNIT On githut phpunit is Composer Simply add a dependency on phpunit phpunit
  • CURL请求问题

    我正在尝试验证 paypal pdt 信息 我生成了模型表单并提交了它 IT 部门也开始工作并返回了信息 我尝试了同样的事情来发出卷曲请求 但我的当前请求对我来说返回空白 我的模型形式
  • 使用 php 将 HTML 输出转换为纯文本

    我正在尝试将示例 HTML 输出转换为纯文本 但我不知道如何操作 我使用 file get contents 但我尝试转换的页面返回的结果最相似 raw http localhost guestbook profiles php file
  • PHP IMAP 解码消息

    我有通过 Base64 编码和 8 位编码发送的电子邮件 我想知道如何使用 imap fetchstruct 检查消息的编码 已经这样做了大约两个小时 所以丢失了 然后正确解码 Gmail 和 Mailbox iOS 上的应用程序 将其作为
  • 如何将上传的STEP文件转换为其他格式?

    如何将上传的 STEP 文件转换为其他 CAD 格式 最好使用 PHP 我将一个小型 STEP 文件上传到 3dContentCentral 并立即看到新上传的 STEP 文件的 20 种不同文件类型格式 示例网址 希望你们中的一些人能给我

随机推荐

  • rspec 与 devise 的集成测试抛出 NoMethodError 错误

    我在这里发布了类似的错误 但所有这些都无法解决我的问题 我的文件 spec request news controller spec rb 如下所示 require spec helper describe NewsController d
  • php 头问题

    你能帮我一下吗 我转移到新的托管 突然收到此错误 警告 无法修改标头信息 标头已由 输出从 home capital public html Google Connect php 1 开始 在 home capital public htm
  • AS3 瓦片地图渲染(具有 1000 个瓦片)

    首先我要说的是 这里的上下文是 Actionscript 3 0 IDE Flashbuilder 以及椋鸟框架 http gamua com starling 因此 我想创建一个可用于平台游戏或类似游戏的图块地图 我想在 800x600
  • R:在 data.frame 列中拆分不平衡列表

    假设您有一个具有以下结构的数据框 df lt data frame a c 1 2 3 4 b c job1 job2 job1a job4 job5 job6 job9 job10 job11 列所在的位置b是一个以分号分隔的列表 按行不
  • Apple Watch 应用程序无法本地化

    我已经为德语 法语 西班牙语和简体中文设置了 interface storyboard 字符串 我下载了 iOS 应用程序并将其加载到手表上 例如 我然后将手表语言设置为德语 但用户界面仍然是英文 以下是 interface storybo
  • 我的列表视图不会输出,是否需要 if 回发?

    所以我正在运行一个 C 函数 该函数应该根据值更改文本的颜色 当我从列表视图中删除该函数时 它会输出值 但是当我包含它时 它不会输出任何内容我现在终于发现我的函数没有任何问题 但我如何将数据绑定到列表视图 所以我想知道我做错了什么 这是我的
  • 当 props 改变时,React 不会重新渲染组件

    我有一个问题 当 React 组件的 props 改变时 它们不会重新渲染 GroupLabel 将 counter 作为 prop export const GroupLabel props gt const change gt prop
  • 如何查找属于 Firebase 应用程序一部分的用户?

    我在 Firebase 中有一个项目 该项目有 2 个应用程序 1 安卓 2 iOS 我想知道哪些用户是从 android 平台注册的 同样也是从 iOS 平台注册的 有办法知道吗 可能没有办法直接找到android用户和iOS用户 你必须
  • 如何使 .NET COM 对象成为单元线程?

    NET 对象默认是自由线程的 如果通过 COM 编组到另一个线程 它们总是会编组到自己 无论创建者线程是否为 STA 也无论它们的线程如何ThreadingModel注册表值 我怀疑 他们汇总了免费线程封送拆收器 http support
  • 关于如何将 JSON 消息转换为 ASN.1 的想法

    我正在尝试将 JSON 消息转换为 ASN 1 我的目标是将 JSON 从wire shark 捕获 转换为 ASN 1 然后将 asn1 转换为 802 11p 我应该研究哪些想法或资源 我正在使用Python 3 7 您可以使用此工具将
  • 数据源的驱动程序类的名称丢失(Netbeans+ PostgreSql + Glassfish)

    我正在尝试在 Postgres 9 2 db 和 Glassfish 4 服务器上使用 Netbeans 8 开发 EJB 应用程序 在 glassfish 管理面板中创建连接池和 JDBC 资源后 我无法使用数据源添加实体 Netbean
  • 如何捕获在 C# 中的 DataGridView 上触发“CellEndEdit”的击键?

    我有一个设置为 EditOnF2 的 DataGridView 我在 CellEndEdit 事件处理程序中对数据进行了一些特殊处理 以设置单元格的值 我仍然希望 EditOnKeyStrokeOrF2 的功能能够在按下 Esc 键时恢复到
  • Gensim LDA 主题分配

    我希望使用 LDA 将每个文档分配给一个主题 现在我意识到您得到的是 LDA 主题的分布 然而 正如您从下面最后一行看到的 我将其分配给最有可能的主题 我的问题是这样的 我必须跑lda corpus 有点第二次为了获得这些主题 是否有其他内
  • 可从 mdpi 加载而不是 hdpi 中绘制

    我已经使用不同的可绘制目录 ldpi mdpi 和 hdpi 设置了我的项目 我有一个具有两种不同分辨率的背景png drawable mdpi 文件夹中的320x480 和drawable hdpi 中的480x800 两者具有相同的文件
  • 如何在 jQuery jTable 中上传图像

    我在 jQuery jTable 的创建模式下成功创建了一个上传字段 如下所示 upload title Upload Image input function data return
  • 没有地图的地理编码

    我可以在没有地图的情况下使用 Google 地图地理编码 API 吗 我有一个带有自动完成功能的文本框 Google Maps API Place 我希望在用户输入街道号码后 我会得到邮政编码 问候 自动完成是允许在没有地图的情况下使用 G
  • 如何通过 PHP 获取字符串形式的 HTML 页面?

    我正在通过 PHP 从网页中获取一些信息simple php dom和卷曲 问题是页面构建不正确 因此 DOM 对象包含错误信息 如何获取 HTML 文件作为 PHP var 中的字符串 以便我可以通过它运行正则表达式 Curl 不起作用
  • 为页面创建新应用程序

    我有一个个人 FB 帐户 从那里我创建了一个新页面来介绍我的博客网站 我在我的网站上下载了一个适用于我的 WordPress 主题的小部件 以便我可以链接两个帐户以进行自动更新 该小部件要求我通过创建新应用程序提供应用程序 ID 和密钥 当
  • FMDB SQLite 问题:查询的行数?

    有谁知道如何在使用 FMDB 时返回查询计数 如果我执行Query select count from sometable were 我会得到一个空的FMResultSet 如何获取查询的行数 我是否需要执行 select from som
  • 使用 XMLHttpRequest 不使用 jQuery 将 JSON 数据发送到 PHP

    我正在尝试使用 XMLHttpRequest 对象从表单发送 JSON 数据 我可以使用以下函数发送数据 FireBug 中没有显示任何错误 并且 FireBug 可以很好地显示请求中的 JSON 数据 但是 我将数据发送到echo php