首页 > 解决方案 > 为什么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); ?>

标签: javascriptphpajaxpost

解决方案


如果您在浏览器的地址栏中键入 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 请求。稍后,当有人访问该服务器上的页面时,我想显示该数据

然后你需要将数据存储在某个地方。通常这将在数据库中。

  1. JavaScript 运行并将数据 POST 到 URL
  2. URL 处的 PHP 将其插入数据库
  3. 稍后有人访问该服务器上的页面
  4. PHP 在数据库中查看是否有任何数据并将其包含在页面中

另一方面,如果您的意思是:

有人正在查看页面 (A)。当有人访问不同的页面 (B) 时,JavaScript 用于向服务器发出 HTTP 请求。数据应立即显示在 A 页上

...那么您应该研究 WebSockets,因为您需要将数据推送到浏览器。


推荐阅读