javascript - JSON 到 PHP API 没有发生
问题描述
我正在尝试使用 Javascript 和 PHP 在单击按钮时保存数据。
按钮点击:
var xhr = new XMLHttpRequest();
var url = "savedata.php";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
/*xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
console.log(json.rawText + ", " + json.convertedText);
}
};*/
var data = JSON.stringify({"rawText": rt, "convertedText": ct});
xhr.send(data);
保存数据.php
<?php
header("Content-Type: application/json");
require('db/db.php');
session_start();
$saverawText = $_POST['rawText'];
$saveConvertedText = $_POST['convertedText'];
$ins_query="insert into cmn_data (`rawtext`,`convertedtext`) values ('$saverawText','$saveConvertedText')";
$result = mysqli_query($con, $ins_query);
?>
在 Db 中:创建了一条记录但它是空的,所以每次我单击保存按钮时都会创建 1 条记录但它是空的。上面的语法有什么问题?
谢谢!
解决方案
PHP 不会将 JSON 请求解析为 $_POST 数组本身。您应该在 php 中解析请求正文:
$request = json_decode(file_get_contents('php://input'), true);
$saverawText = $request['rawText'];
$saveConvertedText = $request['convertedText'];
或使用 FormData 对象将数据传递给请求:
var data = new FormData();
data.append("rawText", rt);
data.append("convertedText", ct);
xhr.send(data);
并且如前所述,将用户直接输入到 sql 中可能会导致 sql 注入。使用mysqli_real_escape_string转义用户输入或 PDO 驱动程序,这是一种更复杂但更可靠的方法。
推荐阅读
- go - 如何处理可以增长而不会阻塞的队列
- laravel - 在 Laravel 通知中使用 $notifiable 中的 Nexmo 自定义配置
- semantic-ui - 如何在 React Semantic UI 中的 Progressbar 上设置自定义文本
- vue.js - Nativescript-vue 在点击事件时显示图像
- android - 如何获取wifi ssid并上传到firebase?
- c - “the” C 标准是否指定编译器必须遵守的标准?
- php - 电子邮件不使用 PHPmail 功能发送
- php - 使用 MySQL 的简单搜索栏返回没有结果
- c# - 类不返回值
- python-3.x - Python中作为对象的函数范围