سؤال

أحاول هذه الطريقة الجديدة التي رأيتها 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 في المقام الأول :)
مستندات مسج لحالة التسلسل أسلوب .serializearray () يخلق جافا سكريبت مجموعة مصفوفة من الأشياء، جاهز لتكون مشفرة كسلسلة JSON. جاهز أن يتم ترميزه ليس جون. على ما يبدو، لا توجد وظيفة Object2json في jQuery لذلك إما استخدامها https://github.com/douglascrockford/json-js/blob/master/json2.js..js. كحزب 3 ليب أو استخدام http://api.jquery.com/serialize/ في حين أن.

نصائح أخرى

هيكل JSON عاد ليس سلسلة. يجب عليك استخدام مكتبة إضافية أو مكتبة تابعة لجهة خارجية إلى "بتردد". انظر هذا لمزيد من المعلومات:

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

قد لا يزال OP بالفعل استخدام 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

ممكن باستخدام صفيف التسلسل و JSON_DECODE ()

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

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

يتم استلام القيم كصفيف

يمكن استرجاع كل قيمة باستخدام قيمة $ [0] ['value'] يتم إعطاء كل اسم مكون HTML كقيمة $ [0] [الاسم "

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() الطريقة التي ربما تنتج إخراج غير مرغوب فيه.

لا يغير جافا سكريبت الطريقة التي تحصل عليها القيم التي تحصل عليها؟ ألا يجب أن تكون قادرا على الوصول إلى القيم عبر 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