2011-11-03 10 views
7

मैं स्थानीय रूप से एक साधारण AJAX फ़ंक्शन को कार्यान्वित करना चाहता हूं जो मुझे उपयोगकर्ता प्रकारों के रूप में पहले से मौजूद नोड्स के नोड शीर्षक को स्वत: पूर्ण करने की अनुमति देता है। इसके लिए, मुझे एक एपीआई रखने की क्षमता की आवश्यकता है जिसे मैं नोड शीर्षक पर खोज सकता हूं। समस्या यह है कि जब मैं कच्चे JSON आउटपुट करता हूं, तो यह टैग से घिरा हुआ है। तो, कोई फर्क नहीं पड़ता कि मुझे क्या करना है, मैं हो रही है ...मैं ड्रूपल का उपयोग कर वास्तविक JSON कैसे वापस कर सकता हूं?

<html> 
    <head> 
    </head> 
    <body> 
     <pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre> 
    </body> 
</html> 

मुझे लगता है कि केवल पहले से ही सामग्री आउटपुट एक कस्टम पृष्ठ टेम्पलेट, कि उत्पादन एक ही परिणाम को लागू करने की कोशिश की है रखने के लिए। यहां बताया गया है कि मैं वर्तमान में यह कैसे कर रहा हूं, मेरी मॉड्यूल फ़ाइल में ...

<?php 

/** 
* Implementation of hook_menu() 
*/ 
function content_relation_menu() { 
    $items = array(); 
    $items['api'] = array(
     'title' => 'Search', 
     'page callback' => 'content_relation_get', 
     'access callback' => TRUE, 
     'type' => MENU_CALLBACK, 
    ); 

    return $items; 
} 

function content_relation_get($term = '') { 
    drupal_add_http_header('Content-Type', 'application/javascript; utf-8'); 
    $var = json_encode(
     db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll() 
    ); 
    echo $var; 
    exit(0); 
} 

मैं सिर्फ कच्चे JSON को कैसे वापस कर सकता हूं?

उत्तर

9

'ड्रूपल' तरीका drupal_json_output() और drupal_exit() का उपयोग कर रहा है।

$data = db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll(); 

drupal_json_output($data); 

drupal_exit(); 

अद्यतन

मैं सिर्फ अपने कोड डाल के रूप में है, एक मॉड्यूल में और सभी मैं जब http://site.com/api का अनुरोध प्राप्त की उम्मीद JSON है गया है, वहाँ कोई टैग नहीं है। समस्या Drupal के साथ कुछ भी नहीं होगी, सर्वर/ब्राउज़र कॉन्फ़िगरेशन के साथ अधिक होने की संभावना है।

इस कड़ी में मदद कर सकते हैं:

What do browsers want for the Content-Type header on json ajax responses?

+0

इस तरह "और अधिक सही" है, लेकिन यह यह वास्तव में किया उत्पादन कच्चे जे एस पता चला है। फिर भी आपका धन्यवाद। – rybosome

+0

तुम मुझे यह करने के लिए हरा, मैं सिर्फ इतना है कि प्रभाव :) – Clive

0

बाहर निकलें (0); और यह काम करना चाहिए। यदि आपका पेज कॉलबैक कुछ भी वापस नहीं करता है तो सामान्य थीम हैंडलर को कॉल नहीं किया जाता है ताकि आपको कच्चा आउटपुट मिल सके।

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

+1

तकनीकी रूप से सही उत्तर के लिए डाउनवोट्स? वास्तव में? –

+1

समस्या को हल करते समय एक सीएमएस को खटखटाते हुए आपको यह मिल सकता है कि यह सच भी है। ;) बीच सड़क जिस तरह से केवल एक फोन के साथ डेटाबेस स्तर तक Drupal bootstrap करने के लिए DRUPAL_BOOTSTRAP_DATABASE drupal_bootstrap करने के लिए() और भारी मॉड्यूल भूमि के ऊपर के सभी से बचने के हो सकता है। –

2

यह वास्तव में उत्पादन कच्चे JSON DID - क्रोम एचटीएमएल रैपिंग जोड़ने था। कमांड लाइन कर्ल में आउटपुट को देखते हुए पता चला कि इसने आउटपुट कच्चे JSON किया था।

+0

Chrome को किसी वेबपेज के रूप में प्रदर्शित किया जा सकता है की एक बहुत ही सख्त अर्थ प्रतीत होता है करने के लिए मेरा उत्तर अद्यतन; इसलिए यह आपके JSON आउटपुट में HTML और PRE टैग जोड़ता है जो भ्रमित है। स्रोत देखें और आप देखेंगे कि वहां कोई टैग नहीं है। अच्छी टिप्पणी – razzed

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

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