javascript - 为什么ajax'post'不起作用?
问题描述
我想将数据发布到 php 站点然后打印。php 打印不起作用。我已经检查了其他问题,但没有任何帮助。它不会成功。为什么?
JS(工作)
$.ajax({
url: 'https://whatever.com/data.php',
type: 'POST',
dataType: 'json',
contentType: 'application/json',
async: false,
data: data
});
PHP 后端(不工作)
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST,GET,OPTIONS');
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
header('Content-type: application/json;charset=utf-8');
$json = file_get_contents('php://input');
$data = json_decode($json);
print_r($data); ?>
解决方案
如果您在浏览器的地址栏中键入 URL,则浏览器将向该 URL 发出请求并在窗口中呈现响应(或者如果它是无法呈现的类型,则将其保存到文件中窗户)。
如果您将<img src="http://example.com/some.jpeg" alt="">
一个页面放入浏览器窗口中呈现的页面,则浏览器将向该 URL 发出请求并呈现它在页面中返回的图像。(请注意,它不会用图像替换整个页面,它<img>
不是链接)。
如果您使用 Ajax(通过 XMLHttpRequest、fetch 或 jQuery 或 axios 等包装库)向 URL 发出请求,则浏览器将向该 URL 发出请求并将响应传回 JavaScript。
之后该数据发生的任何事情:您必须编写 JavaScript 来执行此操作。
您没有在浏览器窗口中加载新网页。您无法加载带有<img>
元素的图像。您正在使用 JavaScript 获取数据。(通常当人们这样做时,他们会想做一些更有趣的事情,然后要么用数据替换整个页面,要么将数据附加到页面的最后。除了让 JavaScript 作者之外,没有任何明智的默认事情可以做决定如何处理它)。
当前版本的 jQuery 返回一个 thenable 对象,因此您可以将其视为从以下位置获取数据的承诺:
$.ajax({
url: 'https://whatever.com/data.php',
type: 'POST',
dataType: 'json',
contentType: 'application/json',
data: data
}).then(function (data) {
alert(data);
});
您可能想做一些比仅仅提醒响应更有趣的事情。MDN 有一个使用 JavaScript 操作文档的介绍性指南。
好的,我明白了我必须在 javascript 中响应目标的响应。但是我怎么说这些数据应该打印在目标页面上呢?例如:脚本在 google.com 上,捕获用户数据,然后将此数据发送到 example.com 并在那里打印。
这越来越不清楚,但假设你的意思是:
当有人访问页面时,JavaScript 用于向服务器发出 HTTP 请求。稍后,当有人访问该服务器上的页面时,我想显示该数据
然后你需要将数据存储在某个地方。通常这将在数据库中。
- JavaScript 运行并将数据 POST 到 URL
- URL 处的 PHP 将其插入数据库
- 稍后有人访问该服务器上的页面
- PHP 在数据库中查看是否有任何数据并将其包含在页面中
另一方面,如果您的意思是:
有人正在查看页面 (A)。当有人访问不同的页面 (B) 时,JavaScript 用于向服务器发出 HTTP 请求。数据应立即显示在 A 页上
...那么您应该研究 WebSockets,因为您需要将数据推送到浏览器。
推荐阅读
- c# - Unity 2018 C# - Fbx 使用输入运行动画缩放?
- javascript - 结合 ReactJS + Marzipano 时出现白屏?
- service-worker - 缓存在相对路径下的缓存存储中的项目
- java - HttpsURLConnection 身份验证器错误
- javascript - 如何从 redux-persist 中删除所有条目
- javascript - JavaScript 添加多个十进制数并在 0.59 后舍入该值
- vba - Excel VBA:引用 Worksheet.Cells() 中的列索引
- java - getAs() - 将 Apache Spark 1.6.3 迁移到 Apache Spark 2.2.0
- c - 我在做这个未分配的指针取消引用时遇到了一个典型的错误
- c - 加减hackerrank