मैं PHP के json_encode()
कुछ डेटा, jQuery के ajax()
द्वारा प्राप्त वापस जाने के लिए उपयोग कर रहा हूँjson_encode एक विकृत JSON (अतिरिक्त छिपा चरित्र के साथ) बनाने
$.ajax({
dataType: 'json',
contentType: 'application/json',
cache: false,
type: 'POST',
url: './api/_imgdown.php',
error: function(jqXHR, textStatus, errorThrow) {
console.log(jqXHR, textStatus, errorThrow);
},
success: function(data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);
}
});
पीएचपी है:
:header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
फिर जब php मेरी कोड चलने पर वह इस डेटा जोड़कर समाप्त होता है
$apiResponse['data'][] = [
"mid" => (int)$mid,
"card_type" => $card_type,
"header_size" => (int)$headers['Content-Length'],
"saved_size" => (int)filesize($imgSavePath),
"saved_path" => $imgSavePath
];
//spit out the JSON
echo json_encode($apiResponse);
exit();
JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
पहले यह वैध है। मेरा अजाक्स जो इस PHP को पुनर्प्राप्त करता है हमेशा parseerror
(ajax()
के भाग में) के साथ समाप्त होता है।
यदि आप इस JSON को http://jsonlint.com/ पर कॉपी और पेस्ट करते हैं, तो यह कहता है कि "अप्रत्याशित टोकन" और http://jsonformatter.curiousconcept.com/ कहता है मान्य नहीं है।
मैंने echo json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
की कोशिश की है, भले ही स्लेश से बचने से ठीक है \/
लेकिन कोई फर्क नहीं पड़ता।
लेकिन वास्तव में क्या मान्य नहीं है? PHP को वैध JSON वापस नहीं करना चाहिए था?
अतिरिक्त जानकारी:
- json_encode creating malformed JSON data?
- https://stackoverflow.com/a/15654848/684932: Windows7, क्रोम v28.XX पर परीक्षण, अपाचे पर पीएचपी 5.4.XX का उपयोग कर
प्रश्न मैं वास्तव में इस पोस्ट करने से पहले पढ़ा है
- about json_encode and ajax dataType: "json"
- php json_encode not returning proper json encoded string
अद्यतन: JSONlint में एसओ से
प्रतिलिपि बनाई जा रही मान्य JSON देता है। तो मैंने थोड़ा आगे की जांच की और देखा कि PHP एक अजीब छिपे हुए चरित्र का निर्माण कर रहा है जो वास्तव में जेसन को अमान्य बना रहा है। नीचे स्क्रीनशॉट देखें। मैं इसे कैसे ठीक करता हूं?
JSONLint इसे अच्छा दिखाता है। –
आपका जेसन मान्य है, और आपका PHP मान्य है। मेरा अनुमान है कि यह आपका अजाक्स कॉल है। Json – sircapsalot
का अनुरोध करने के लिए '$ .getJSON' एक सरल AJAX कॉल का उपयोग करने का प्रयास करें, यह जेसनलिंट पर मान्य है। –