2012-01-11 20 views
5

यहाँ कुछ जावास्क्रिप्ट है:क्या jquery की पोस्ट() विधि एएसपीनेट 3.5 वेबमाइंड को कॉल करने में सक्षम है?

$.ajax({ 
     type: "POST", 
     url: "default.aspx/GetDate", 
     contentType: "application/json; charset=utf-8", 
     data: {}, 
     dataType: "json", 
     success: function(result) { 
      alert(result.d); 
     } 
    }); 

उपरोक्त विधि काम करता है के रूप में मैं उम्मीद होती है और अलर्ट स्ट्रिंग default.aspx

में [WebMethod] कहा जाता GetDate से लौटे लेकिन जब मैं का उपयोग करें:

$.post(
     "default.aspx/GetDate", 
     {}, 
     function(result) { 
      alert(result.d); 
     }, 
     "json" 
    ); 

इस सफलता विधि में चेतावनी कभी नहीं आग लगती है।

फ़ायरबग मैं देख सकता हूँ कि पोस्ट मूल रूप से काम किया है में - यह रिटर्न 200 ठीक
लेकिन इस मामले में प्रतिक्रिया पूरे default.aspx पृष्ठ के HTML है बजाय JSON लौटे जब मैं $ .ajax का उपयोग() तरीका।

संपादित करें:
फायरबग में दिखाए गए प्रतिक्रिया और अनुरोध शीर्षलेख समान नहीं हैं।

$ .ajax() के साथ

...

REQUEST: 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding gzip, deflate 
Accept-Language en-gb,en;q=0.5 
Connection keep-alive 
Content-Type application/json; charset=utf-8 
Cookie (removed) 
Host (removed) 
Referer (removed) 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 
X-Requested-With XMLHttpRequest 

RESPONSE: 
Cache-Control private, max-age=0 
Content-Length 27 
Content-Type application/json; charset=utf-8 
Date Wed, 11 Jan 2012 12:36:56 GMT 
Server Microsoft-IIS/7.5 
X-Powered-By ASP.NET 
$ .post() के साथ

...

REQUEST: 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding gzip, deflate 
Accept-Language en-gb,en;q=0.5 
Connection keep-alive 
Cookie (removed) 
Host (removed) 
Referer (removed) 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 
X-Requested-With XMLHttpRequest 

RESPONSE: 
Cache-Control private 
Content-Length 13815 
Content-Type text/html; charset=utf-8 
Date Wed, 11 Jan 2012 12:36:53 GMT 
Server Microsoft-IIS/7.5 
X-AspNet-Version 2.0.50727 
X-Powered-By ASP.NET 

मैं इस के लिए $ .post() विधि का उपयोग कर सकते, या मुझे $ .ajax() विधि का उपयोग करना है?

+0

क्या आप * निश्चित * अनुरोध हेडर समान हैं? क्या 'सामग्री-प्रकार' शीर्षलेख भिन्न नहीं है? – lonesomeday

+0

क्या आपको निश्चित रूप से वेब सेवा कॉल करने की आवश्यकता है? मैंने सचमुच इसे $ .get का उपयोग करके किया है और शुद्ध HTML (बिना हेडर के) लौटाया है और यह मेरी आवश्यकताओं के लिए पूरी तरह से काम करता है। अगर इससे मदद मिलेगी तो मुझे बताएं और मैं कुछ कोड पोस्ट करूंगा। – Archer

+0

जितनी बार मैं उन्हें @lonesomeday पढ़ता हूं, आपका संदेह सही है - "सामग्री-प्रकार: एप्लिकेशन/जेसन; charset = utf-8" वास्तव में $ .ajax() कॉल से अनुरोध शीर्षलेख में है। – mikev2

उत्तर

3

यह सामान्य है। जब आप $.post का उपयोग करते हैं तो आप सेट नहीं कर सकते हैं जैसा कि आप $.ajax के साथ करते हैं। और सर्वर इस हेडर की अपेक्षा करता है। तो मूल रूप से आप $.post के साथ एक एएसपी.NET पृष्ठ विधि का आह्वान नहीं कर सकते हैं।

+0

धन्यवाद डारिन - यह वह जवाब है जिसे मैं ढूंढ रहा था और मुझे लगता है कि आपको पहले मिल गया था। – mikev2

+0

तथ्य के कुछ देर बाद, लेकिन यह जोड़ना चाहता था कि यह आंशिक रूप से गलत है। '$ .post() '** ** का उपयोग तब तक किया जा सकता है जब तक कि $ .ajaxSetup()' को कॉल को async अनुरोध के लिए डिफ़ॉल्ट पैरामीटर कॉन्फ़िगर करने से पहले किया गया हो। मैं इन मापदंडों को अपने मास्टर पेजों या लेआउट दृश्यों में किसी भी तरह से कॉन्फ़िगर करता हूं, इसलिए मैं जो कॉल करता हूं वह '$ .post()' का उपयोग करके सफल होता है। – lsuarez

+0

मैंने केवल यह @lthibodeaux देखा है - लेकिन पोस्ट करने के लिए धन्यवाद। यह बहुत उपयोगी लग रहा है। – mikev2

3

मुझे लगता है कि ऐसा इसलिए है क्योंकि आपका सर्वरसाइड कोड Content-Type हेडर सेट करने की मांग करता है। $.post का डिफ़ॉल्ट कार्यान्वयन इसकी अनुमति नहीं देता है।

अगर, हालांकि, हर एक बार जब आप अपने आवेदन में AJAX का उपयोग आप इस शीर्ष लेख की जरूरत उपस्थित होना है, तो आप $.post को संशोधित कर सकते हैं:

$.post = function (url, data, callback, type) { 
    if (jQuery.isFunction(data)) { 
     type = type || callback; 
     callback = data; 
     data = undefined; 
    } 

    return jQuery.ajax({ 
     type: 'POST', 
     url: url, 
     data: data, 
     success: callback, 
     dataType: type 
     contentType: "application/json; charset=utf-8" 
    }); 
}; 
इस के साथ

, सभी$.post कॉल contentType सेट करना होगा। यह एक अच्छा विचार हो सकता है; यह नहीं हो सकता है ...

+0

आपके सही उत्तर और कामकाज के लिए बहुत बहुत धन्यवाद - मैं इसका उपयोग नहीं करूंगा, क्योंकि यह देख सकता है कि यह एक समस्या क्यों हो सकती है। यह समझने में मेरी मदद करने के लिए भी धन्यवाद कि यह क्यों विफल रहा था। मुझे इस मामले का कहीं भी उल्लेख नहीं मिला। संपादित करें: दुर्भाग्य से मैं दो पदों को उत्तर के रूप में चिह्नित नहीं कर सकता, और आपकी प्रतिष्ठा 15 से नीचे की तरह भी आपको ऊपर नहीं ले जा सकता है। मैं इसे वापस आने के लिए याद रखने की कोशिश करूंगा! – mikev2

+2

@ mikev2 आप '$ .postMVC' फ़ंक्शन को भी परिभाषित कर सकते हैं, कहें, यह वही होगा, लेकिन केवल तभी जब आप' ContentType' सेट चाहते थे। इससे सामान्य '$। पोस्ट' कॉल प्रभावित नहीं होंगे। – lonesomeday

+0

अब _that_ एक अच्छा विचार की तरह लगता है, जो मुझे लगता है कि मैं उपयोग करूंगा! एक बार फिर धन्यवाद :) – mikev2