2011-08-08 41 views
11

में किसी JSON ऑब्जेक्ट को वापस कैसे करें I क्लासिक एएसपी स्क्रिप्ट (यह AJAX अनुरोध का हिस्सा है) का उपयोग करके एक JSON ऑब्जेक्ट वापस करना चाहता है।क्लासिक एएसपी

अगर मैं सिर्फ पाठ की तरह के रूप में प्रतिक्रिया भेजें:

response.write("{ query:'Li', suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['LR','LY','LI','LT'] }") 

कार्य करेगा, या मैं वास्तव में एक JSON पुस्तकालय की आवश्यकता है?

संपादित करें: मैं काम करने के लिए http://www.devbridge.com/projects/autocomplete/jquery/#howto पर स्वत: पूर्ण प्लगइन प्राप्त करने का प्रयास कर रहा हूं।

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

$(document).ready(function() { 
    var a = $('#txtValue').autocomplete({ 
    serviceUrl:'script.asp', 
    minChars:2, 
    maxHeight:400, 
    width:300, 
    zIndex: 9999, 
    deferRequestBy: 0, //miliseconds 
    onSelect: function(value, data){ alert('You selected: ' + value + ', ' + data); }, 
}); 

एएसपी:

<% 
response.ContentType = "application/json" 
response.write("{ query:'Li', suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['LR','LY','LI','LT'] }") 
%> 

स्वत: पूर्ण काम नहीं कर रहा। यह काम करता है अगर मैं स्थानीय लुकअप सरणी जैसे लुकअप का उपयोग करता हूं: ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई']

लेकिन अजैक्स के साथ कुछ गड़बड़ है जिसका अर्थ है कि यह नहीं है सूची को ठीक से वापस करें।

+0

आप वास्तव में यह कोशिश की है में डालने के बाद? इसे जाने दो, आपको क्या खोना है? –

+0

मैंने कोशिश की, यह हाहा काम नहीं कर रहा है। मुझे यकीन नहीं है कि यह कारण है या नहीं। मैं स्वत: पूर्ण प्लगइन प्राप्त करने की कोशिश कर रहा हूं (http://www.devbridge.com/projects/autocomplete/jquery/#howto) – Flash

+0

काम कर रहा हूं मुझे पता है कि आप पहले से ही अपनी समस्या का समाधान कर रहे हैं, लेकिन यहां आपके JSON को सत्यापित करने के लिए एक लिंक है और हो सुनिश्चित करें कि यह समस्या का कारण नहीं है: http://jsonlint.com/ – Onaiggac

उत्तर

23

यह क्लाइंट पक्ष पर एक पार्सिंग त्रुटि प्रतीत होता है।

मुझे नहीं लगता था कि इससे कोई फर्क पड़ता है, लेकिन ऐसा लगता है कि अगर आप संपत्ति के नाम सहित सबकुछ उद्धृत करते हैं, तो ऐसा लगता है। और एकल उद्धरणों के बजाय डबल-कोट्स का उपयोग करें - जो स्पष्ट रूप से एक अंतर बना रहा है।

अपने डबल-कोट्स को दोगुना करना याद रखें (कम से कम मुझे लगता है कि आप इसे VBScript में कैसे करते हैं - एक लंबा समय रहा है)।

तो:

<% 
    Response.ContentType = "application/json" 
    Response.Write("{ ""query"":""Li"", ""suggestions"":[""Liberia"",""Libyan Arab Jamahiriya"",""Liechtenstein"",""Lithuania""], ""data"":[""LR"",""LY"",""LI"",""LT""] }") 
%> 
+0

मुझे इसे मारो। हाँ vbScript में उन्हें बचने के लिए अपने उद्धरण डबल करें। –

+0

धन्यवाद, मुझे यह काम मिल गया :) – Flash

+2

यह एक पार्सिंग त्रुटि नहीं है। [JSON व्याकरण] (http://json.org/) निर्दिष्ट करता है कि संपत्ति के नाम तार हैं, और तारों को डबल कोट्स में संलग्न किया जाना चाहिए। –

2

Joe's answer आप के लिए काम करना चाहिए। हालांकि आप क्लासिक एएसपी से बहुत सारे JSON को आउटपुट करने जा रहे हैं, तो आप aspjson पर देखना चाहेंगे।

+0

में काम करने के लिए सामग्री-प्रकार सेट करने से पहले Response.Clear का उपयोग करें। यह क्रॉकफ़ोर्ड से json2.js स्क्रिप्ट का उपयोग करने के लिए भी सरल है। Https: //github.com/douglascrockford/JSON-js/blob/master/json2.js यह भी देखें http://stackoverflow.com/a/9630663/48082 – Cheeso

3

मैं इसे नीचे दिए गए कोड के साथ काम मिल गया .... उद्धरण दोहरीकरण और क्वेरी स्ट्रिंग

currQuery= request.querystring("query") 
response.expires=-1 
Dim rsMain,sqlMain,rettxt,JobOpenToArr 
set rsMain= Server.CreateObject("ADODB.Recordset") 
rsMain.CursorLocation = adUseClient 
sqlMain = "select JobOpenTo FROM Jobs WHERE JobOpenTo LIKE '%"&currQuery & "%' group by JobOpenTo order by JobOpenTo" 
rsMain.Open sqlMain, Session("XXX_CMS") 
if Not rsMain.Eof Then 
       '## build the string 
     rettxt = "{query:""" & currQuery & """, suggestions:[" 

    JobOpenToArr = rsMain.getRows()  
    For i = 0 to UBound(JobOpenToArr,2) 

     rettxt = rettxt & """" & JobOpenToArr(0,i) & """," 

    Next  
    '##knock off trailing comma 
    rettxt = left(rettxt,len(rettxt)-1) 
    rettxt = rettxt & "]}" 
    Response.Write rettxt 
संबंधित मुद्दे