문제

내가 본이 새로운 방법을 시도하고 있습니다 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 제 3 자 Lib 또는 사용 http://api.jquery.com/serialize/ 대신에.

다른 팁

반환 된 JSON 구조는 문자열이 아닙니다. 플러그인 또는 타사 라이브러리를 사용하여 "Stringify"를 사용해야합니다. 자세한 내용은 다음을 참조하십시오.

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

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

Serialize Array 및 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의 내용을 버려서 JavaScript 양식을 사용하여받는 내용을 확인할 수 있습니다. print_r($_POST). 그러면 필요한 데이터에 액세스하기 위해 PHP에서해야 할 일에 대한 아이디어가 제공됩니다.

이 기능을 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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top