एक PHP स्क्रिप्ट से JSON लौट रहा है




header (10)

JSON पर अपनी डोमेन ऑब्जेक्ट्स को प्रारूपित करने का एक आसान तरीका मार्शल सीरियलाइज़र का उपयोग करना है। फिर डेटा को json_encode पास करें और अपनी आवश्यकताओं के लिए सही सामग्री-प्रकार शीर्षलेख भेजें। यदि आप सिम्फनी जैसे ढांचे का उपयोग कर रहे हैं, तो आपको हेडर मैन्युअल रूप से सेट करने की देखभाल करने की आवश्यकता नहीं है। वहां आप JsonResponse उपयोग कर सकते हैं।

उदाहरण के लिए जावास्क्रिप्ट से निपटने के लिए सही सामग्री-प्रकार application/javascript

या यदि आपको कुछ सुंदर पुराने ब्राउज़र का समर्थन करने की आवश्यकता है तो सबसे सुरक्षित text/javascript

मोबाइल ऐप जैसे अन्य सभी उद्देश्यों के लिए सामग्री-प्रकार के रूप में application/json उपयोग करें।

यहां एक छोटा सा उदाहरण दिया गया है:

<?php
...
$userCollection = [$user1, $user2, $user3];

$data = Marshal::serializeCollectionCallable(function (User $user) {
    return [
        'username' => $user->getUsername(),
        'email'    => $user->getEmail(),
        'birthday' => $user->getBirthday()->format('Y-m-d'),
        'followers => count($user->getFollowers()),
    ];
}, $userCollection);

header('Content-Type: application/json');
echo json_encode($data);

मैं जेएसओएन को एक PHP स्क्रिप्ट से वापस करना चाहता हूं।

क्या मैं सिर्फ परिणाम गूंजता हूं? क्या मुझे Content-Type शीर्षलेख सेट करना है?


आप इस छोटी PHP पुस्तकालय का उपयोग कर सकते हैं। यह हेडर भेजता है और आपको आसानी से इसका उपयोग करने के लिए एक वस्तु देता है।

ऐसा लग रहा है :

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>

एक्सेस सुरक्षा सेट करना भी अच्छा है - बस उस डोमेन के साथ बदलें जहां आप इसे प्राप्त करने में सक्षम होना चाहते हैं।

<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
    $response = array();
    $response[0] = array(
        'id' => '1',
        'value1'=> 'value1',
        'value2'=> 'value2'
    );

echo json_encode($response); 
?>

यहां पर अधिक नमूने हैं: एक्सेस-कंट्रोल-ऑब्जेक्ट-उत्पत्ति को कैसे बाईपास करें?


जबकि आप इसके बिना आमतौर पर ठीक होते हैं, आप सामग्री-प्रकार शीर्षलेख सेट कर सकते हैं और सेट करना चाहिए:

<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);

यदि मैं किसी विशेष ढांचे का उपयोग नहीं कर रहा हूं, तो मैं आमतौर पर आउटपुट व्यवहार को संशोधित करने के लिए कुछ अनुरोध पैराम्स को अनुमति देता हूं। यह उपयोगी हो सकता है, आमतौर पर त्वरित समस्या निवारण के लिए, हेडर नहीं भेजने के लिए, या कभी-कभी आँखों पर डेटा पेलोड प्रिंट करें (हालांकि ज्यादातर मामलों में, यह आवश्यक नहीं होना चाहिए)।


जैसा ऊपर बताया गया है:

header('Content-Type: application/json');

नौकरी कर देगा लेकिन ध्यान रखें कि:

  • इस हेडर का उपयोग नहीं होने पर भी अजाक्स को जेसन पढ़ने में कोई समस्या नहीं होगी, सिवाय इसके कि आपके जेसन में कुछ HTML टैग हैं या नहीं। इस मामले में आपको हेडर को एप्लिकेशन / जेसन के रूप में सेट करने की आवश्यकता है।

  • सुनिश्चित करें कि आपकी फ़ाइल यूटीएफ 8-बीओएम में एन्कोड नहीं है। यह प्रारूप फ़ाइल के शीर्ष में एक वर्ण जोड़ता है, इसलिए आपका हेडर () कॉल विफल हो जाएगा।


डेटा को एन्कोड करने के लिए json_encode आज़माएं और सामग्री-प्रकार को header('Content-type: application/json');


यदि आप डेटाबेस से पूछते हैं और जेएसओएन प्रारूप में परिणाम सेट की आवश्यकता है तो इसे इस तरह किया जा सकता है:

<?php

$db = mysqli_connect("localhost","root","","mylogs");
//MSG
$query = "SELECT * FROM logs LIMIT 20";
$result = mysqli_query($db, $query);
//Add all records to an array
$rows = array();
while($row = $result->fetch_array()){
    $rows[] = $row;
}
//Return result to jTable
$qryResult = array();
$qryResult['logs'] = $rows;
echo json_encode($qryResult);

mysqli_close($db);

?>

JQuery का उपयोग करके परिणाम पार्स करने में मदद के लिए इस ट्यूटोरियल पर एक नज़र डालें।


यदि आपको कस्टम जानकारी भेजने वाले PHP से जेसन प्राप्त करने की आवश्यकता है तो आप यह header('Content-Type: application/json'); जोड़ सकते हैं header('Content-Type: application/json'); किसी अन्य चीज को मुद्रित करने से पहले, तो आप आपको custome echo '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';


हाँ, आपको आउटपुट प्रदर्शित करने के लिए गूंज का उपयोग करने की आवश्यकता होगी। मिमटाइप: एप्लिकेशन / जेसन


हां, बस उचित HTTP शीर्षलेख सेट करें, परिणाम गूंजें, और फिर स्क्रिप्ट से बाहर निकलें।





header