簡體   English   中英

如何從 PHP 中的 serializeArray 獲取 POST 值?

[英]How to get the POST values from serializeArray in PHP?

我正在嘗試這種我見過的新方法serializeArray()

//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

所以我得到了這些鍵值對,但是如何使用 PHP 訪問它們?

我以為我需要這樣做,但它不起作用:

// in PHP script
$data = json_decode($_POST['data'], true);

var_dump($data);// will return NULL?

謝謝,理查德

像Gumbo建議的那樣,您可能無法處理json_decode的返回值。
嘗試

$data = json_decode($_POST['data'], true);
var_dump($data);

如果$data不包含預期數據,則var_dump($_POST); 查看Ajax調用發布到您的腳本的內容。 您可能正在嘗試從錯誤的密鑰訪問JSON。

編輯
實際上,你應該確保你真的在第一時間發送JSON :)
用於序列化狀態的jQuery文檔.serializeArray()方法創建一個JavaScript對象數組可以編碼為JSON字符串。 准備編碼不是JSON。 顯然,jQuery中沒有Object2JSON函數,所以要么使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js作為第三方庫,要么使用http://api.jquery.com/序列化/而不是。

通過進行以下更改,OP實際上仍然可以使用serializeArray()而不是serialize():

//JS 
var data = $("#form :input").serializeArray();
data = JSON.stringify(data);
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

// PHP
$data = json_decode(stripslashes($_POST['data']),true);
print_r($data); // this will print out the post data as an associative array

返回的JSON結構不是字符串。 您必須使用插件或第三方庫來“字符串化”它。 有關詳細信息,請參閱此

http://www.tutorialspoint.com/jquery/ajax-serializearray.htm

它可以通過使用序列化數組和json_decode()

// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call

//PHP
 $value =  (json_decode(stripslashes($_REQUEST['values']), true));

值以數組形式接收

可以使用$ value [0] ['value']檢索每個值。每個html組件名稱都以$ value [0] ['name']的形式給出

print_r($value) //gives the following result
Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 

我有一個非常類似的情況,我相信Ty W有正確的答案。 我將包含一個我的代碼示例,以防萬一有足夠的差異來改變結果,但似乎你可以像通常在php中那樣使用發布的值。

// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...

// PHP
echo $_POST['fieldName'];

這是一個非常簡化的示例,但我認為關鍵點是您不想使用json_decode()方法,因為它可能會產生不需要的輸出。

javascript不會改變值發布的方式嗎? 你不應該像往常一樣通過PHP訪問這些值來通過$_POST['name_of_input_goes_here']

編輯:您可以隨時轉儲$ _POST的內容,以使用print_r($_POST)查看您從javascript表單提交中收到的內容。 這可以讓您了解在PHP中需要做什么來訪問所需的數據。

也許它會幫助那些正在尋找的人:)

你發送這樣的數據:

$.ajax({
    url: 'url_name',
    data: {
        form_data: $('#form').serialize(),

    },
    dataType: 'json',
    method: 'POST'
})

console.log($('#form').serialize()) //'f_ctrType=5&f_status=2&f_createdAt=2022/02/24&f_participants=1700'

然后在服務器端使用parse_str( $_POST['form_data'], $res )

然后變量$res將包含以下內容:

Array
( 
    [f_ctrType] => 5
    [f_status] => 2
    [f_createdAt] => '2022/02/24'
    [f_participants] => 1700
)

你可以在php中使用這個函數來反轉serializeArray()。

<?php
function serializeToArray($data){
        foreach ($data as $d) {
            if( substr($d["name"], -1) == "]" ){
                $d["name"] = explode("[", str_replace("]", "", $d["name"]));
                switch (sizeof($d["name"])) {
                    case 2:
                        $a[$d["name"][0]][$d["name"][1]] = $d["value"];
                    break;

                    case 3:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"];
                    break;

                    case 4:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"];
                    break;
                }
            }else{
                $a[$d["name"]] = $d["value"];
            } // if
        } // foreach

        return $a;
    }
?>

暫無
暫無

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

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