2010-05-14 13 views
6

मैं एक खाली सरणी प्राप्त करने की समस्या का सामना कर रहा हूँ जब मैं निम्नलिखित तरीके से एक AJAX अनुरोध करते हैं:jQuery AJAX के पीएचपी JSON समस्या

:

इस कोड मैं जावास्क्रिप्ट में क्रियान्वित कर रहा हूँ है

<script type="text/javascript" src="lib/jquery.js"></script> 
    <script type="text/javascript" src="lib/jquery.json.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 

    /* Preparar JSON para el request */ 
    var mJSON = new Object; 
    mJSON.id_consulta = new Array; 
    for (var i=0; i<3; i++){ 
    mJSON.id_consulta[i] = new Object; 
    mJSON.id_consulta[i].id = i; 
    } 
    var sJSON = $.toJSON(mJSON); 

    $.ajax({ 
    type: "POST",  
    url: "getUbicaciones.php", 
    data: sJSON, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8",    
    success: function(respuesta){ 
     alert(respuesta); 
    }, 
    error: function (request,error){ 
     alert("Error: " + request.statusText + ". " + error); 
    } 
    }); 

    }); 
    </script> 

और यह पीएचपी तहत कोड है:

<?php 
/* Decodificar JSON */ 
$m_decoded = $_POST; 

print_r($m_decoded); 
exit; 
?> 

और यह सब मैं इस से मिलता है, Chrome के डेवलपर उपकरण का उपयोग कर एक खाली सरणी है:

Array 
(
) 

मैं क्या गलत कर रहा हूं पर कोई संकेत?

{"id_consulta":[{"id":1},{"id":2},{"id":3}]} 

अग्रिम में हर किसी को धन्यवाद:

स्ट्रिंग sJSON सही ढंग से इनकोडिंग जा रहा है, यह मैं क्या मिलता है जब मैं "अलर्ट" से है कि एक पर क्या है!

उत्तर

0

अंत में यह काम किया!

जावास्क्रिप्ट:

var sJSON = $.toJSON(mJSON.id_consulta); 


      $.ajax({ 
       type: "POST",  
       url: "getUbicaciones.php", 
       data: "json=" + sJSON,     
       processData: false,    
       success: function(respuesta){  

       }, 
       error: function (request,error){ 

       } 
      }); 

पीएचपी:।

$m_decoded = json_decode(stripslashes($_POST["json"])); 

ध्यान दें कि मैं "stripslashes" का उपयोग करने के बाद से JSON स्ट्रिंग "चरित्र के लिए स्लैश था

यह इस तरह से चला गया

आपकी सभी मदद के लिए सभी को धन्यवाद, मुझे उम्मीद है कि यह किसी और की मदद करेगा।

+0

वैसे यह काम करता है, लेकिन आप बस 'डेटा: एमजेएसओएन' और 'प्रक्रिया डेटा' का उल्लेख करने की आवश्यकता नहीं हो सकती थी, इसे 'var sJSON = $ .toJSON (mJSON.id_consulta) के साथ JSON में परिवर्तित करने की आवश्यकता नहीं है; '। आप बस 'डेटा: एमजेएसओएन' लिख सकते थे और 'प्रक्रिया डेटा पैरामीटर' हटा सकते थे .... PHP अंत में आपको सीधे एक सरणी मिल जाएगी जो आपको 'डीकोड' और न ही 'स्ट्रिप्सलाश' की आवश्यकता होगी – swapnilsarwe

+0

कोड [पेस्टबिन पर] देखें (http : //pastebin.com/iM3cnE0G) – swapnilsarwe

2

आपकी जावास्क्रिप्ट से, आप इस तरह डेटा पास करने के कुंजी-मान जोड़ों के रूप में की जरूरत है:

data: {"mydata" : sJSON}, 

पीएचपी पक्ष पर, के बाद से $_POST एक साहचर्य सरणी आप तो इसलिए की तरह अपने डेटा का उपयोग कर सकते हैं:

$m_decoded = $_POST['mydata']; 
+0

हाय जस्टिन, धन्यवाद लेकिन मैं इस =/ – Arturo

+0

हम्म के साथ कुछ भी नहीं मिला। क्या आपने POST अनुरोध में वास्तव में क्या भेजा है यह देखने के लिए फ़ायरबग का उपयोग करने का प्रयास किया है? –

+0

इसके अलावा, आप क्यों कह रहे हैं 'सामग्री टाइप: "एप्लिकेशन/जेसन; charset = utf-8", 'सामग्री के बजाय टाइप करें:' "एप्लिकेशन/जेसन" ' –

1

आप PHP-side पर JSON को डीकोड नहीं कर रहे हैं।

प्रयास करें json_decode

+0

हां, लेकिन उसके उदाहरण में मुझे लगता है कि वह सिर्फ यह इंगित कर रहा था कि '$ _POST' सरणी खाली थी । संभावित रूप से डेटा प्राप्त होने के बाद उसे इसके साथ कुछ उपयोगी करने के लिए 'json_decode' का उपयोग करने की आवश्यकता होगी। \t \t \t \t $ .ajax ({ \t \t \t \t \t प्रकार:: "पोस्ट", \t –

0

अपने कोड में कई मुद्दों के होते हैं:

  1. आप dataType: "json" की घोषणा कर रहे हैं लेकिन सर्वर JSON वापस नहीं करता है, यह सादे पाठ देता है। documentation से:

    The type of data that you're expecting back from the server. If none is specified, jQuery will intelligently try to get the results, based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).

  2. मुझे नहीं लगता कि jQuery सफलतापूर्वक एक क्वेरी स्ट्रिंग के लिए अपने डेटा बदल सकता है। आप ऑब्जेक्ट्स की एक सरणी भेजने की कोशिश कर रहे हैं:

    {"id_consulta":[{"id":1},{"id":2},{"id":3}]} 
    

    फायरबग का उपयोग करें और जांचें कि कौन सा डेटा वास्तव में भेजा गया है। आप JSON के रूप में पूरी स्ट्रिंग भेजना चाहते हैं, तो आप गलत पर processData विकल्प सेट करने के लिए है:

    $.ajax({ 
        type: "POST",  
        url: "getUbicaciones.php", 
        data: "json=" + $.toJSON(mJSON.id_consulta), 
        processData: false, 
        //.... 
    

    और आप सर्वर साइड पर स्ट्रिंग डिकोड करने के लिए है:

    $data = json_decode($_POST['json']); 
    
+0

अपने त्वरित प्रतिक्रिया फेलिक्स के लिए धन्यवाद, लेकिन मुझे लगता है कि काम नहीं किया, मैं इस के लिए मेरे ajax अनुरोध बदल \t \t \t \t यूआरएल: "getUbicaciones.php", \t \t \t \t \t डेटा: "json =" + $ .toJSON (mJSON.id_consulta), \t \t \t \t \t \t \t \t \t \t processData: झूठे, \t \t \t \t \t \t \t \t सफलता: समारोह (respuesta) {\t \t \t \t \t \t \t \t चेतावनी ("सफलता:" + respuesta); \t \t \t \t \t}, \t \t \t \t \t त्रुटि: समारोह (अनुरोध, त्रुटि) { \t \t \t \t \t \t चेतावनी ("त्रुटि:" + request.statusText + "।"+ त्रुटि); \t \t \t \t \t} \t \t \t \t}); \t और यह PHP में मैंने किया था: $ m_decoded = json_decode ($ _ पोस्ट [" json "]); लेकिन परिणाम अब खाली है, $ m_decoded खाली है, कोई अन्य संकेत? – Arturo

+0

मैं इसे PHP (जेसन एन्कोडेड) में प्राप्त कर रहा हूं: [{\ "id \": 0}, {\ "id \": 1}, {\ "id \": 2}] और json_decode के साथ डीकोड करने का प्रयास, यह "खाली" देता है। मैं यह कोशिश कर रहा हूं: $ m_decoded = json_decode ($ _ POST ["json"]); और परिणाम कुछ भी नहीं है। – Arturo

+0

अंत में यह काम किया, आपकी टिप्पणियां बहुत उपयोगी थीं! – Arturo

संबंधित मुद्दे