2009-06-30 17 views
16

मुझे इस कोड के साथ समस्याएं आ रही हैं, मैंने पिछले 3 घंटों को खोदने और जवाब खोजने का प्रयास किया था। जैसा कि मैंने सफल नहीं था, मैं सिर्फ कोड पोस्ट और मापदंडों का किस तरह मैं अपने वेब सेवा पर होना चाहिए इस अनुरोध को पूरा करने के लिए कहेगा:एएसपी.नेट: jQuery AJAX 'डेटा' परम समस्या

var args = [{ key: 'myId', value: 'myValue' }, { key: 'myOtherId', value: 'myOtherValue'}]; 
var dataToSend = { name: 'fooId', value: 'fooValue', args: args }; 
$.ajax({ 
type: 'POST', 
url: 'fooURL', 
data: dataToSend, 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: OnSuccess, 
error: OnError 
}); 

अब, हस्ताक्षर किस तरह मैं सक्षम होने के लिए होना चाहिए मेरा "डेटा टॉसेंड" प्राप्त करने के लिए?

मैं कोशिश की है:

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, List<Args> args) 
{ 
    return "OK"; 
} 

public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

और

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, object[] args) 
{ 
    return "OK"; 
} 

और भी

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(dataToSend dataToSend) 
{ 
    return "OK"; 
} 

public class dataToSend 
{ 
    public string name { get; set; } 
    public object value { get; set; } 
    public List<Args> args = new List<Args>(); 

} 
public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

उत्तर

22

एक स्ट्रिंग, नहीं एक वस्तु, यानी के रूप में डेटा गुजर का प्रयास करें:

 
$.ajax({ 
    ... 
    data : '{ a: 2, b: 3 }', 
    ... 
}); 

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

जेएसओएन को डेटा प्रकार के रूप में उपयोग करने के लिए jQuery को बताने के बावजूद ऐसा होता है - ऐसा लगता है कि सर्वर से भेजे गए अनुरोध पेलोड को न केवल परिणाम से संबंधित है।

आपके पास जो कुछ भी है, वह मेरे लिए सही दिखता है।

+3

बहुत यकीन है कि सैम यहां है। अधिक जानकारी के लिए http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/ देखें। मानते हैं कि स्ट्रिंग इसे ठीक करती है, मुझे लगता है कि यह पहला वाक्यविन्यास होगा। –

0

आप JSON-सक्षम नेट WebServices/webMethods के साथ काम कर रहे हैं ... मेरी युक्तियां हैं:

  • web.config कॉन्फ़िगरेशन के साथ बहुत सावधान रहें। बड़े पैरामीटर, पोस्ट विधि और जेएसओएन को सक्षम करने के लिए इसका इस्तेमाल करें।

  • ऑब्जेक्ट सीरियलाइजेशन और deserialization को संभालने के लिए एक ढांचे का उपयोग करें। मैं न्यूटन सॉफ्ट के जेसन.नेट की सिफारिश करूंगा।

मुझे नहीं लगता कि एएसपी.NET स्वचालित रूप से आपके लिए यह करता है, आपके पैरामीटर हमेशा स्ट्रिंग होते हैं। आपको वह तार लेना चाहिए, इसे deserialize और वस्तुओं की एक सरणी में बदलना चाहिए।

+0

मैं यह करता है लगता है। इसे देखें (हालांकि यह एमवीसी है एक ही अवधारणा को वेब रूपों के लिए लागू किया जाना चाहिए): http://blogger.forgottenskies.com/?p=243 –

2

हालांकि यह एक पुरानी पोस्ट है, मैंने सोचा कि मैं योगदान दूंगा। मैं एक एसोसिएटिव सरणी को एक ही स्वीकार्य पोस्ट को एक ही विचार भेज रहा हूं जिसे मुझे लिखना आसान लगता है।

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

postData[0] = 'data!'; 
postData[1] = 'moar data!'; 
postData[2] = 'and some data'; 

$.ajax({ 
    type: 'POST', 
    url: 'postUrl', 
    data: { data: postData }, 
}); 

पीएचपी

$data = $_POST['data'][0]; 
$moar_data = $_POST['data'][1]; 
$and_some_data = $_POST['data'][2]; 
संबंधित मुद्दे