2010-12-30 9 views
6

मैं एक वेब सेवा के लिए AJAX अनुरोध बनाने का प्रयास कर रहा हूं जो XML में कुछ निर्दिष्ट पैरामीटर दिए गए डेटा को लौटाता है। ऐसा लगता है कि आईई में अच्छी तरह से काम करता है, लेकिन फ़ायरफ़ॉक्स प्रतिक्रिया को डीकोड नहीं कर सकता है। मैं डीकोडिंग के बाद फिडलर में सफलतापूर्वक प्रतिक्रिया देख सकता हूं। यहां कोड है:

$(function() { 
    $.ajax({ 
     type: "GET", 
     url: 'http:/localhost/webservice.asmx/GetTags?groupId=10', 
     contentType: "text/xml; charset=utf-8", 
     dataType: "xml", 
     success: function(response) { 
      $('#result').html('success',response); 
      $(response).find("string").each(function() { 
       $('#result').append($(this).text()); 
      }); 
     }, 
     error: function(response) { 
      $('#result').html('failure',response); 
     } 
    }); 

}); 

क्या यह निर्दिष्ट करने का कोई तरीका है कि प्रतिक्रिया को डीकोड करने की आवश्यकता है? या इसे काम करने के लिए कोई और तरीका?

संपादित करें: @ निकी 9 6 9 6 - जेएसओएन एनकोडेड नहीं है क्योंकि डेटा एक्सएमएल में वापस आ गया है।

@Oleg - नमूना XML मैं ब्राउज़र में देख सकते हैं, तो आपको URL के माध्यम से वेब सेवा तक पहुँचने इस प्रकार है:

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <string>tag 1</string> 
    <string>tag 2</string> 
    <string>tag 3</string> 
</ArrayOfString> 

TextView में Fiddler रिटर्न और संदेश

"रिस्पांस एन्कोड किया गया है और को निरीक्षण से पहले डीकोड किया जाना चाहिए। पर क्लिक करने के लिए यहां क्लिक करें। "

एक बार क्लिक किया गया यह एक ही एक्सएमएल प्रदर्शित करता है। मैं आईआईएस में गतिशील सामग्री संपीड़न बंद कर देता हूं तो एक्सएमएल सीधे फिडलर में दिखाई देता है, लेकिन एफएफ अभी भी सामना नहीं कर सकता है, ताकि संपीड़न का नियम हो।

मैंने स्क्रिप्ट के साथ थोड़ा सा खेला, ऐसा लगता है कि jQuery कुछ पैरामीटर को डिफ़ॉल्ट या अनुमान लगा सकता है, इसलिए डेटा टाइप, उदाहरण के लिए, अनिवार्य नहीं है। इन सेटिंग्स के साथ मुझे एक सफलता संदेश मिलता है, हालांकि यह अभी भी नहीं जानता कि डेटा के साथ क्या करना है। मैंने कुछ एसएस थ्रेड में सुझाए गए अनुसार "jsonp" को डेटा टाइप करने की कोशिश की है (इस समय इसे नहीं मिल सकता है, जब मैं करता हूं तो इसे लिंक कर दूंगा) और त्रुटि missing ; before statement में बदल जाती है, मुझे लगता है क्योंकि यह JSON ऑब्जेक्ट नहीं है, लेकिन एक्सएमएल है। क्या JSON को इसके बजाय JSON वापस करने का कोई तरीका है?

संपादित 2: मैंने वास्तव में क्या हुआ, यह दर्शाने के लिए url अपडेट किया है। क्षमा करें, मैंने इसे याद किया, किसी को भी इसे खोजना असंभव बना दिया।

+0

जब आप "डीकोड" कहते हैं, तो क्या आपका मतलब है कि यह JSON एन्कोड किया गया है? – Nikki9696

+0

क्या आप उस वेबएमएल डेटा को शामिल कर सकते हैं जो आपको वेब-सेवा से प्राप्त होता है और जिसे आप फिडलर में देखते हैं? – Oleg

उत्तर

2

क्योंकि आप '/webservice.asmx/GetTags?groupId=10' जैसे सापेक्ष यूआरएल का उपयोग करते हैं तो आपको विभिन्न डोमेन के साथ कोई समस्या नहीं थी। ऐसा लगता है कि आपको बस अपना जावास्क्रिप्ट कोड लिटल करना चाहिए। उदाहरण के लिए निम्नलिखित कोड

$(function() { 
    $.ajax({ 
     type: "GET", 
     url: '/WebService1.asmx/GetTags', 
     contentType: "text/xml; charset=utf-8", 
     data: {groupId:10}, 
     success: function (response) { 
      $('#result').html('success:'); 
      $(response).find("string").each(function() { 
       $('#result').append('<br />'+$(this).text()); 
      }); 
     }, 
     error: function (response) { 
      $('#result').html('failure:<br />' + response.responseText); 
     } 
    }); 
}); 

इंटरनेट एक्सप्लोरर, फ़ायरफ़ॉक्स और Google क्रोम में ठीक काम करता है। यदि आपको आवश्यकता है तो मैं यूआरएल पोस्ट कर सकता हूं जहां आप पूरे काम कर रहे विजुअल स्टूडियो 2010 प्रोजेक्ट को डाउनलोड कर सकते हैं।

UPDATED: वेब विधि से XML की बजाय JSON वापस जाने के लिए आप [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] विशेषता (.NET 4.0 में आप अलग अलग अन्य तरीकों से भी ऐसा ही कर सकते हैं) के लिए [ScriptMethod(UseHttpGet = true)] की जगह ले सकता है और निम्नलिखित

को JavaScript कोड संशोधित
$(function() { 
    $.ajax({ 
     type: "GET", 
     url: '/WebService1.asmx/GetTagsJson', 
     contentType: "application/json; charset=utf-8", 
     data: { groupId: 10 }, 
     //dataType: "xml", 
     success: function (response) { 
      $('#result').html('success:'); 
      $(response.d).each(function() { 
       $('#result').append('<br />' + this); 
      }); 
     }, 
     error: function (response) { 
      $('#result').html('failure:<br />' + response.responseText); 
     } 
    }); 
}); 
+0

वास्तव में पथ सापेक्ष नहीं था, और यह समस्या थी। मैंने उदाहरण को सरल बनाने के लिए इसे अधिकतर काट दिया, और इस प्रकार किसी के भी स्थान के लिए असंभव बना दिया। मैं इसे प्रतिबिंबित करने के लिए इसे बदल दूंगा। – Shagglez

+0

@Shagglez: आपके प्रश्न '/webservice.asmx/GetTags?groupId=10' से यूआरएल पथ सापेक्ष है। इसके अलावा आप गलत तरीके से कोड 'jQuery.html()' में इस्तेमाल करते हैं (http://api.jquery.com/html/ देखें): '$ ('# परिणाम')। Html ('सफलता', प्रतिक्रिया) ; '। मेरे उत्तर में निश्चित संस्करण देखें। – Oleg

+0

आपको धन्यवाद !!! सामग्री टाइप करने के लिए डेटाटाइप बदलना दिन बचाया !!! – trgraglia

1

संक्षिप्त उत्तर है: मैंने अपने वेब सेवा में किसी भिन्न डोमेन से कॉल करने का प्रयास किया।

यहां कुछ और जानकारी कर रहे हैं: Firebug में एक्सएमएल टैब मैंने देखा है कि त्रुटि XML Parsing Error: no element found Location: moz-nullprincipal:{757cb587-20da-4d2f-bf80-e3b915a234d4} Line Number 1, Column 1: था लौटे को देख, इसलिए मैं इस विशेष संदेश के लिए देखा है और किसी एक ही मुद्दा http://forum.jquery.com/topic/jquery-ajax-and-xml-issues-no-element-found होने भर में ठोकर खाई। यहां वह समस्या है जिसने मेरी समस्या हल की:

हालांकि यह दस्तावेज़ीकरण में स्पष्ट नहीं है, आप अन्य डोमेन से डेटा लाने के लिए AJAX कॉल का उपयोग नहीं कर सकते हैं।

यह मेरे लिए हुआ कारण यह IE में काम किया है कि कि पहली बार यह मुझसे पूछा कि क्या मैं इस असुरक्षित कॉल (या कुछ इस तरह) बनाने के लिए अनुमति होगी, और यह एक ajax बनाने की चर्चा करते हुए किया गया होगा एक अलग डोमेन पर कॉल करें। एफएफ ने मुझे इसके बारे में कभी संकेत नहीं दिया और शायद डिफ़ॉल्ट रूप से कॉल को अक्षम कर दिया।

इसे क्रॉस डोमेन संगत बनाना एक और दिन के लिए एक मुद्दा है, क्योंकि अब यह सब कुछ कर रहा है जो मुझे चाहिए।

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