JSON到PHP API没发生

时间:2019-05-09 17:44:55

标签: javascript php json

我正在尝试使用Javascript和PHP在单击按钮时保存数据。

按钮单击:

DataSource ds = new ByteArrayDataSource(filePath.getBytes(), filePath.getContentType());
attachPart.setDataHandler(new DataHandler(ds));
attachPart.setFileName(filePath.getOriginalFilename());
attachPart.setDisposition(Part.ATTACHMENT);

savedata.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);

在Db中:创建了一条记录,但是它是空的,因此每次我单击“保存”按钮时,都会创建1条记录,但是它是空的。上面的语法有什么问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

PHP不会将JSON请求解析为$ _POST数组本身。您应该在php中解析请求正文:

$request = json_decode(file_get_contents('php://input'), true);
$saverawText = $request['rawText'];
$saveConvertedText = $request['convertedText'];

或通过FormaData对象传递数据以进行请求:

var data = new FormData();
data.append("rawText", rt);
data.append("convertedText", ct);
xhr.send(data);

并且如前所述,将用户直接输入到sql中可能会导致sql注入。使用mysqli_real_escape_string可以逃避用户输入或PDO驱动程序,这有点复杂,但方法更可靠。

答案 1 :(得分:0)

您可以像这样发布您的值:

var xhr = new XMLHttpRequest();
var url = "savedata.php";
xhr.open("POST", url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
/*xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.rawText + ", " + json.convertedText);
    }
};*/
var data = "rawText=" + rt + "&convertedText=" + ct;
xhr.send(data);