6

私は私が見たこの新しい方法を試しています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?

ありがとう、リチャード

4

7 に答える 7

6

Gumboが提案したように、 json_decodeの戻り値を処理していない可能性があります。
試す

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

$data期待されるデータが含まれていない場合はvar_dump($_POST);、Ajax呼び出しがスクリプトに何を投稿したかを確認します。間違ったキーからJSONにアクセスしようとしている可能性があります。

編集
実際には、そもそも実際にJSONを送信していることを確認する必要があります:)
シリアル化状態のjQueryドキュメント.serializeArray()メソッドは、JSON文字列としてエンコードする準備ができたオブジェクトのJavaScript配列を作成します。エンコードの準備ができているのはJSONではありません。どうやら、jQueryにはObject2JSON関数がないため、https://github.com/douglascrockford/JSON-js/blob/master/json2.jsをサードパーティのライブラリとして使用するか、 http: //api.jquery.com/を使用してください。代わりにserialize/ 。

于 2010-02-10T15:05:56.997 に答える
6

OPは、次の変更を行うことで、serialize()だけでなく、実際にはserializeArray()を使用できた可能性があります。

//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
于 2013-03-18T19:05:37.800 に答える
5

シリアル化配列と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 ) ) 
于 2015-04-28T07:35:33.017 に答える
4

返されるJSON構造は文字列ではありません。プラグインまたはサードパーティのライブラリを使用して「文字列化」する必要があります。詳細については、こちらをご覧ください。

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

于 2010-02-10T15:03:51.870 に答える
1

私はこれと非常によく似た状況にあり、TyWが正解だと思います。結果を変更するのに十分な違いがある場合に備えて、コードの例を含めますが、phpで通常使用するのと同じように、投稿された値を使用できるようです。

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

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

json_decode()これは非常に単純化された例ですが、重要な点は、おそらく不要な出力が生成されるため、このメソッドを使用したくないということだと思います。

于 2014-10-02T03:26:44.713 に答える
0

javascriptは、値が投稿される方法を変更しませんか?いつものようにPHP経由で値にアクセスできるべきではありません$_POST['name_of_input_goes_here']

編集:いつでも$ _POSTの内容をダンプして、を使用してjavascriptフォームの送信から何を受け取っているかを確認できますprint_r($_POST)。これにより、必要なデータにアクセスするためにPHPで何をする必要があるかについてのアイデアが得られます。

于 2010-02-10T14:59:22.020 に答える
-1

この関数を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;
    }
?>
于 2017-08-24T21:18:14.243 に答える