2012-07-11 15 views
6

पढ़ा है, मैं नीचे जावास्क्रिप्ट से PHP पृष्ठ पर एक सरणी पास कर रहा हूं।PHP ने जावास्क्रिप्ट सरणी

var arrF1 = [{"Item":"item1no", 
     "Desc":"item1desc", 
     "Remarks":"item1note"}, 
      {"Item":"item2no", 
     "Desc":"item2desc", 
     "Remarks":"item2note"} 
    ]; 
$.ajax({   
    type: "POST", 
    url: "http://www.mydomain.com/pdfs/flist.php", 
    data: { favArray : arrF1 }, 
    success: function() { 
     alert('ok, sent'); 
    } 
}); 

मेरे PHP पृष्ठ में, मैंने नीचे के सरणी को पढ़ा है।

$fArray = json_decode($_POST['favArray']) 

और मैंने इस तरह के सरणी मूल्य तक पहुंचने का प्रयास किया।

$fArrav[0]->{'Item'} 
$fArrav[0]->{'Desc'} 
$fArrav[1]->{'Item'} 

क्या यह सही है? मैं एफपीडीएफ का उपयोग कर सर्वर पर एक पीडीएफ उत्पन्न कर रहा हूं। लेकिन ऊपर के साथ, यह सरणी नहीं पढ़ रहा है।

मुझे यह अधिकार नहीं करना चाहिए। कृपया मदद करें।

धन्यवाद।

+2

'var_dump ($ fArray)' यकीन है कि यह आबादी किया जा रहा है ठीक से – andrewsi

उत्तर

3
इस पीएचपी साथ

:

function handlePost() { 
    $a = $_POST['favArray']; 
    var_dump($a); 
} 

..और इस जावास्क्रिप्ट:

function post() { 
    var a1 = [ 
     {"Item":"109249383", 
     "Desc":"item1desc", 
     "Remarks":"item1note"}, 

     {"Item":"298298210", 
     "Desc":"item2desc", 
     "Remarks":"item2note"} 
    ]; 

    $.ajax({ 
     type: "POST", 
     url: "readArray.php", 
     data: { favArray : a1 }, 
     success: function() { 
      alert1('ok, sent'); 
     } 
    }); 
} 

... मैं इस उत्पादन प्राप्त करें:

HTTP/1.1 200 OK 
Content-Type: text/html 
Server: Microsoft-IIS/7.5 
X-Powered-By: PHP/5.3.10 
Date: Wed, 11 Jul 2012 21:04:16 GMT 
Content-Length: 315 

array(2) { 
    [0]=> 
    array(3) { 
    ["Item"]=> 
    string(9) "109249383" 
    ["Desc"]=> 
    string(9) "item1desc" 
    ["Remarks"]=> 
    string(9) "item1note" 
    } 
    [1]=> 
    array(3) { 
    ["Item"]=> 
    string(9) "298298210" 
    ["Desc"]=> 
    string(9) "item2desc" 
    ["Remarks"]=> 
    string(9) "item2note" 
    } 
} 

इस मामले में, तार पर डेटा का एन्कोडिंग JSON नहीं है। JQuery के ajax फ़ंक्शन द्वारा उपयोग किए गए डिफ़ॉल्ट के अनुसार यह 'एप्लिकेशन/एक्स-www-form-urlencoded' है। इस तरह दिखता है:

favArray=%5B%7B%22Item%22%3A%22109249383%22%2C%22Desc%22%3A%22item1desc%22%2C 
    %22Remarks%22%3A%22item1note%22%7D%2C%7B%22Item%22%3A%22298298210%22%2C%22 
    Desc%22%3A%22item2desc%22%2C%22Remarks%22%3A%22item2note%22%7D%5D 

(एक लाइन में सब)
इसलिए यह भावना पीएचपी भीतर json_decode कॉल करने के लिए नहीं है - वहाँ कभी नहीं था किसी भी JSON शामिल। PHP स्वचालित रूप से यूआरएल-एन्कोडेड पोस्ट बॉडी को डीकोड करता है।


आप चाहते JSON के साथ सांकेतिक शब्दों में बदलना करने के लिए है, तो आप JSON.stringify() सीधे उपयोग कर सकते हैं। यह को ब्राउज़र पक्ष पर json2.js की आवश्यकता हो सकती है। (this answer देखें)

JSON का उपयोग करने के लिए, तो आप ब्राउज़र में कुछ इस तरह की आवश्यकता होगी:

function handlePost() { 
    header('Content-Type: text/plain; charset="UTF-8"'); 
    $post_body = file_get_contents('php://input'); 
    $a = json_decode($post_body); 
    var_dump($a); 
} 

: php तरफ इस तरह

function post_json_encoded() { 
    $.ajax({ 
     type: "POST", 
     url: "postArray.php", 
     contentType: 'application/json', // outbound header 
     dataType: 'text',    // expected response 
     data: JSON.stringify(a1),  // explicitly encode 
     success: function() { 
      alert1('ok, json sent'); 
     } 
    }); 
} 

... और फिर कुछ इस मामले में ऑन-द-वायर प्रतिनिधित्व इस तरह दिखता है:

[{"Item":"109249383","Desc":"item1desc","Remarks":"item1note"}, 
{"Item":"298298210","Desc":"item2desc","Remarks":"item2note"}] 

...और php var_dump उत्पादन यह है:

array(2) { 
    [0]=> 
    object(stdClass)#1 (3) { 
    ["Item"]=> 
    string(9) "109249383" 
    ["Desc"]=> 
    string(9) "item1desc" 
    ["Remarks"]=> 
    string(9) "item1note" 
    } 
    [1]=> 
    object(stdClass)#2 (3) { 
    ["Item"]=> 
    string(9) "298298210" 
    ["Desc"]=> 
    string(9) "item2desc" 
    ["Remarks"]=> 
    string(9) "item2note" 
    } 
} 
+0

हाय बनाने के लिए, की कोशिश करो बहुत विस्तार explaination के लिए धन्यवाद देता हूं। मैं यह कहने के लिए काम करने में सक्षम था कि आपने जो कहा था (मैं इस पर बहुत नया हूं)। जेसन डीकोड के बिना समाप्त हो गया, और urlencoded टाइप करें। धन्यवाद। – user1509446

0

अतिरिक्त कोष्ठक की कोई आवश्यकता नहीं:

$fArrav[0]->Item 
1
$fArray = $_POST['favArray']; 
echo $fArray[0]['Item']; // item1no 
echo $fArray[1]['Item']; // item2no 
संबंधित मुद्दे