2011-08-18 24 views
42

मैं jquery से बाकी सेवा तक AJAX कॉल करने की कोशिश कर रहा हूं। इस्तेमाल की गई बाकी सेवा मैकॉन्ग के ब्लॉग के ट्यूटोरियल से ठीक है, यह एक: http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/आरईएसटी सेवा के लिए jQuery AJAX कॉल

सेवा काम करती है, लेकिन जब मैं jQuery से कॉल करने का प्रयास करता हूं, फ़ायरबग में 200 स्टेटस कोड होता है, लेकिन प्रतिक्रिया अनुभाग में , कुछ भी तो नहीं।

यहाँ ajax कॉल के साथ html पृष्ठ है:

<html> 
<head> 
    <script type="text/javascript" src="jquery-1.6.2.min.js"></script> 
</head> 

<body> 

<button id="ajax">ajax call</button> 
<button id="json">json</button> 

<script type="text/javascript"> 
    $('#json').click(function(){ 
     alert('json'); 
     $.getJSON("http://localhost:8080/restws/json/product/get", 
     function(data) { 
      alert(data);   
      }); 
    }); 

    $('#ajax').click(function(){ 
     alert('ajax'); 
     $.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: "http://localhost:8080/restws/json/product/get", 
      success: function(data){   
       alert(data); 
      } 
     }); 
    }); 

</script> 



</body> 

</html> 

मैं इसे समझ नहीं मैं कहाँ गलत हो गया था, क्या आप मुझे बता सकता है मैं गलत क्या कर रहा हूँ?

धन्यवाद!

+1

अपनी साइट 'http पर चल रहा है: // स्थानीय होस्ट: 8080' के साथ-साथ? यदि यह नहीं है ('http: // localhost /' है [* नहीं * वही] (http://en.wikipedia.org/wiki/Same_origin_policy)), आपको अपना एपीआई आउटपुट [JSONP] बनाना होगा (http://en.wikipedia.org/wiki/JSONP)। –

+0

नहीं, यह सिर्फ एक साधारण एचटीएमएल है, यह डबल क्लिक पर चल रहा है: डी – DaJackal

+0

मेरा मतलब था, यूआरएल क्या है जो इस पृष्ठ को इंगित करता है? –

उत्तर

76

आप जिस मेजबान से अनुरोध कर रहे हैं उसके मुकाबले आप अपने एचटीएमएल को एक अलग मेजबान से चला रहे हैं। इस वजह से, आप same origin policy द्वारा अवरुद्ध हो रहे हैं।

इसके आसपास एक तरीका JSONP का उपयोग करना है। यह क्रॉस-साइट अनुरोधों की अनुमति देता है।

JSON में, आप वापस आ रहे हैं:

{a: 5, b: 6} 

JSONP में, JSON एक समारोह कॉल में लपेटा जाता है, तो यह एक स्क्रिप्ट है, और नहीं एक वस्तु बन जाता है।

callback({a: 5, b: 6}) 

आप एक पैरामीटर callback कहा जाता है स्वीकार करने के लिए अपने बाकी सेवा संपादित करने के लिए, और फिर समारोह नाम के रूप में है कि पैरामीटर का मान का उपयोग करने की जरूरत है। आपको content-type से application/javascript भी बदलना चाहिए।

उदाहरण के लिए: http://localhost:8080/restws/json/product/get?callback=process चाहिए उत्पादन:

process({a: 5, b: 6}) 

आपकी जावास्क्रिप्ट में, आप jQuery बताने के लिए JSONP उपयोग करने के लिए की आवश्यकता होगी। ऐसा करने के लिए, आपको URL पर ?callback=? जोड़ना होगा।

$.getJSON("http://localhost:8080/restws/json/product/get?callback=?", 
    function(data) { 
    alert(data);   
    }); 

आप $.ajax उपयोग करते हैं, यह ऑटो ?callback=? संलग्न अगर आप jsonp उपयोग करने के लिए यह बता देंगे।

$.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    url: "http://localhost:8080/restws/json/product/get", 
    success: function(data){   
    alert(data); 
    } 
}); 
+1

अब यह सही काम कर रहा है, और मुझे लगता है कि मैं समझ गया। धन्यवाद – DaJackal

+0

आपका स्वागत है। जेएसओएनपी अन्य यूआरएल से डेटा प्राप्त करने के लिए 'हैक' है, यह बहुत अच्छा है। –

+0

मुझे अब फायरबग में एक प्रतिक्रिया मिलती है, लेकिन यह फ़ंक्शन (डेटा) में प्रवेश नहीं करती है। तुम जानते हो क्यों? – DaJackal

1

8080 के उपयोग से मुझे लगता है कि आप अपने आराम एपीआई की सेवा के लिए एक टोमकैट सर्वलेट कंटेनर का उपयोग कर रहे हैं। यदि ऐसा है तो आप अपने वेबसर्वर प्रॉक्सी को सर्वलेट कंटेनर के अनुरोधों पर भी विचार कर सकते हैं।

अपाचे के साथ आप आमतौर पर 8080 के बजाय पोर्ट 80 के पीछे वेब सर्वर एपीआई ट्रॉफ़ की सेवा के लिए mod_jk (हालांकि अन्य विकल्प हैं) का उपयोग करने के लिए उपयोग करेंगे जो क्रॉस डोमेन समस्या को हल करेगा।

यह सामान्य प्रथा है, वेबसर्वर में 'स्थैतिक' सामग्री और कंटेनर में गतिशील सामग्री है, लेकिन दोनों एक ही डोमेन के पीछे से सेवा करते हैं। http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

-2

मुझे लगता है कि

'http://localhost:8080`" 
निर्दिष्ट करने के लिए कोई जरूरत नहीं है:

बाकी एपीआई के लिए यूआरएल अपाचे के लिए बिल्ला कनेक्ट करने के लिए http://localhost/restws/json/product/get

यहाँ कैसे mod_jk का उपयोग करने पर एक विवरण होगा यूआरआई भाग में

.. क्योंकि। यदि आप इसे निर्दिष्ट करते हैं, तो आपको हर पर्यावरण के लिए इसे मैन्युअल रूप से बदलना होगा।

केवल

"/restws/json/product/get" also works 
+0

तो अप्रासंगिक, नहीं? – OverCoder

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