2009-04-09 14 views
13

के साथ वेबमाइंड पर पैरामीटर पास करना मेरे पास एक साधारण वेब विधि और AJAX कॉल है और यह एक त्रुटि प्राप्त करने के लिए जारी है जो कह रही है कि यह एक स्ट्रिंग को IDictionary ऑब्जेक्ट में परिवर्तित नहीं कर सकता ???jQuery अजाक्स

var params = '{"ID":"' + rowid + '"}'; 
$.ajax({ 
    url: 'EDI.asmx/GetPartnerDetails', 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify(params), 
    dataType: "json", //not json . let me try to parse 
    success: function(msg, st) { . . . . 

यहाँ WebMethod है:

यहाँ ajax कॉल है

प्रतिक्रिया हेडर
सर्वर:: माइक्रोसॉफ्ट-आईआईएस

<WebMethod()> _ 
Public Function GetPartnerDetails(ByVal ID As String) As String 

    'Dim objParam As IDictionary = CType(JsonConvert.DeserializeObject(ID), IDictionary) 
    'Dim rowID As String = objParam("ID") 

    Dim objController As New HealthComp.BLL.X12Partners.TradingPartnersController 
    Dim objInfo As TradingPartnersInfo = objController.FetchByPartnerID(Int32.Parse(ID)) 

    Return JsonConvert.SerializeObject(objInfo) 
End Function 

यहाँ मैं क्या FireBug से देखते हैं /5.1
दिनांक: गुरु, 09 अप्रैल 200 9:43:59 GMT
jsonerror: सच
कैश-नियंत्रण: निजी
सामग्री-प्रकार: एप्लिकेशन/जेसन; charset = utf-8
सामग्री-लंबाई: 1331

पोस्ट: "{\" आईडी \ ": \" 4 \ "}"

प्रतिक्रिया:

{ "message": "नहीं कर सकते \ u0027 सिस्टम टाइप करने के लिए \ u0027 सिस्टम सिस्टम। स्ट्रिंग \ u0027 टाइप करें \.Generic.IDictionary`2 [System.String, System.Object] \ u0027 "," StackTrace ":" System.Web.Script.Serialization पर ObjectConverter.ConvertObjectToTypeInternal (ऑब्जेक्ट ओ, टाइप टाइप, जावास्क्रिप्टसेरियलाइज़र सीरिएलाइज़र, बूलियन फेंकऑनर, ऑब्जेक्ट & परिवर्तित ऑब्जेक्ट) \ r \ n System.Web.Scri पर pt.Serialization.ObjectConverter.ConvertObjectToTypeMain (वस्तु ओ, प्रकार प्रकार, JavaScriptSerializer serializer, बूलियन throwOnError, वस्तु & convertedObject ) \ r \ n System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType (वस्तु ओ, प्रकार प्रकार, JavaScriptSerializer पर सीरियलाइज़र) \ r \ n System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (जावास्क्रिप्टसेरियलाइज़र सीरियलाइज़र, स्ट्रिंग इनपुट, टाइप प्रकार, इंट 32 गहराई लिमिट) \ r \ n System.Web.Script.Serialization.JavaScriptSerializer पर डिज़ाइन करें [टी] (स्ट्रिंग इनपुट) \ r \ n System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest (HttpContext संदर्भ, जावास्क्रिप्टसेरियलाइज़र serializer) \ r \ n System.Web.Script.Services.RestHandler पर GetRawParams (WebServiceMethodData methodD अता, HttpContext संदर्भ) \ r \ n System.Web.Script.Services पर .RestHandler.ExecuteWebServiceCall (HttpContext संदर्भ, WebServiceMethodData methodData) "," ExceptionType " :" System.InvalidOperationException "}

कोई भी किसी भी विचार है इसके बारे में? धन्यवाद!!

उत्तर

30

त्वरित आइटम:

अपने चर पैरामीटर var params = '{ID:' + rowid + '}'; एक श्रृंखला है।

तो लाइन: data: JSON.stringify(params), अनावश्यक है (या यह होना चाहिए)। बस data: params,

अगला, अपनी वेब विधि पर, आप अपना परिणाम JSON स्ट्रिंग में परिवर्तित कर रहे हैं और इसे एक स्ट्रिंग के रूप में वापस कर रहे हैं। यदि आप वेब विधि वर्ग में ScriptMethod विशेषता है, तो आपको ऐसा करने की आवश्यकता नहीं है। बस डेटा को देशी प्रकार और एएसपी के रूप में वापस कर दें।नेट आपके लिए जेएसओएन में रूपांतरण करेगा।

आप निम्न लेख पढ़ने हो सकता है: http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

+4

आप आदमी हैं। क्रिस बहुत बहुत धन्यवाद! मैंने इसे जोड़ा: var jsonText = JSON.stringify ({ID: rowid}); अपना लेख पढ़ने के बाद। मैंने लेखों का एक टन पढ़ा है जो उद्धरणों के साथ गुजरने वाले पैरामीटर दिखाता है। आपका पहला ऐसा है जिसे मैंने पढ़ा है जो समझाया गया है और इसे ठीक किया गया है। बहुत अधिक gracias! –

+0

मदद करने में खुशी हुई। –

1

उपरोक्त के अतिरिक्त, यह सुनिश्चित करें कि आप 'stringifying' JSON सारणी एक बार से अधिक नहीं हैं बनाने के लिए जाँच के लायक है।

मैंने गलती से JSON.stringify() को उस सरणी पर बुलाया जिसे पहले से ही क्रमबद्ध किया गया था, जिसने ओपी को प्राप्त एक ही मुद्दे को फेंक दिया था।

अर्थात

var arr = JSON.stringify({ id: elementID, name: Name }); 
.... 
$.ajax({ 
... 
data: JSON.stringify(arr), 
... 
}); 

इस उदाहरण में, मेरी समस्या आगमन चर प्रारंभ करने के लिए

var arr = { id: elementID, name: Name }; 

का समाधान बदलते। :)

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