簡體   English   中英

數據顯然沒有通過 AJAX POST 發送 - 我做錯了什么?

[英]Data apparently is not being sent over AJAX POST - what am I doing wrong?

編輯:由於來自這里的反饋,我已經更新了我的代碼,它不再給我一個空數組,但現在它只是給我 null。

編輯 2:我組織中的某個人為我解決了這個問題。 原來我使用的是不需要的 POST 選項:我的工作代碼是:

前端:

$.ajax({
    type: "POST",
    url: "update_data_ajax.php",
    data: {
        events: JSON.stringify(currentEventsRows)
    }
}).done(function(data) {
    console.log("Done");
    console.log(data);
});

后端:

echo json_encode($_POST);

原帖:

I'm trying to make an AJAX POST request to post some data to a SQL table, but it doesn't seem like my POST request is actually sending anything because the PHP backend is simply giving me a null.

為了縮小問題的范圍,我將頁面簡化為發布數據數組的 JavaScript 前端和僅返回數據的 PHP 后端。 這是我的前端網頁(update_data.php)的相關部分:

let currentEventsRows = [/* array of dicts of strings */];

$.ajax({
    method: "POST",
    url: "update_data_ajax.php",
    contentType: "application/json; charset=utf-8",
    dataType: "JSON",
    data: JSON.stringify{
        events: currentEventsRows
    },
    processData: false
}).done(function(data) {
    console.log("Done");
    console.log(data);
});

這是我的 PHP 后端(update_data_ajax.php):

<?php
$_POST = json_decode(file_get_contents("php://input"), true);
echo $_POST;
?>

這是控制台 output:

Done
null

我究竟做錯了什么? 我覺得我錯過了一些完全簡單的東西。

您在這里有 2 個問題,1. 您沒有正確發送 JSON。 2. 您沒有正確閱讀 JSON。

您必須對 JSON 進行編碼才能發送 ajax 呼叫

let currentEventsRows = [/* array of dicts of strings */];

$.ajax({
    method: "POST",
    url: "update_data_ajax.php",
    contentType: "application/json; charset=utf-8",
    dataType: "JSON",
    data: JSON.stringify({
        events: currentEventsRows
    })
    // processData: false -- not needed since the JSON is a string
}).done(function(data) {
    console.log("Done");
    console.log(data);
});

您的 JSON 數據未填充到 $_post 超全局中(這只發生在 multipart/form-data 和 application/x-www-form-urlencoded 中),因此您必須從php://input中讀取它

<?php
echo file_get_contents('php://input');
?>

我組織中的某個人實際上為我解決了這個問題。 原來我正在使用我不需要的 POST 選項。

前端:

$.ajax({
    type: "POST",
    url: "update_data_ajax.php",
    data: {
        events: JSON.stringify(currentEventsRows)
    }
}).done(function(data) {
    console.log("Done");
    console.log(data);
});

后端:

echo json_encode($_POST);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM