2012-04-16 18 views
19

काम नहीं कर रहा है मैं एंड्रॉइड के लिए एक फोनगैप ऐप बना रहा हूं। (रिमोट) सर्वर से डेटा प्राप्त करने के लिए मैं jQuery के $ .ajax() फ़ंक्शन का उपयोग करके एक आरईएसटी कॉल करता हूं। कुछ चीजें आपको पता होना चाहिए रहे हैं:फ़ोनगैप और jQuery का उपयोग कर क्रॉस-डोमेन अनुरोध

  • कॉल का प्रकार पोस्ट
  • होना चाहिए
  • सर्वर उम्मीद JSON डेटा (कम से कम यूज़रनेम और पासवर्ड)
  • सर्वर वापस भेजता है JSON डेटा

कोड:

function makeCall(){ 
    var url = "http://remote/server/rest/call"; 

    var jsonData ='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}'; 

    $.ajax({ 
      headers: {"Content-Type":"application/json; charset=UTF-8"}, 
      type: "POST", 
      url: url, 
      data: jsonData, 
      dataType: "json", 
      success: succesFunction, 
      error: errorFunction 
    }); 
} 

लेकिन, यह काम नहीं करता। जब मैं सर्वर प्रतिक्रिया देखने के लिए फ़ायरबग का उपयोग करता हूं, तो कुछ भी नहीं है। टीसीपीटी्रेस के साथ मैं अनुरोध के शीर्षलेख देख सकता हूं। अपेक्षित पोस्ट विधि के बजाय, कुछ विकल्प हैं, कुछ अजीब हेडर जोड़े गए हैं।

OPTIONS /remote/server/rest/call HTTP/1.1 
Host: localhost:8081 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: nl,en-us;q=0.7,en;q=0.3 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Origin: null 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: content-type 
Pragma: no-cache 
Cache-Control: no-cache 

मुझे पता है कि क्रॉस-डोमेन अनुरोध करने के साथ इसका कुछ संबंध है, लेकिन मुझे नहीं पता कि समस्या को कैसे हल किया जाए। मैं इसे ठीक करने के लिए कुछ चीजें करने की कोशिश की, लेकिन कोई परिणाम के साथ:

उपयोग करने के लिए समस्या भी कुछ करने के लिए है उसी मूल नीति के साथ, लेकिन यह फ़ाइल पर लागू नहीं होता है: // प्रोटोकॉल फोनगैप स्थानीय HTML फ़ाइल लोड करने के लिए उपयोग कर रहा है।

मेरी AndroidManifest.xml फ़ाइल में, विकल्प

<uses-permission android:name="android.permission.INTERNET" /> 

निर्धारित है।

मैं इसे 2 दिनों के लिए ठीक करने की कोशिश कर रहा हूं, लेकिन अब तक कोई परिणाम नहीं है। क्या यह करना भी संभव है? क्या आपके पास मेरे लिए कोई सुझाव है ताकि मैं आगे बढ़ सकूं?

अग्रिम धन्यवाद!

उत्तर

8

मैंने स्वयं को समस्या हल की। समस्या यूआरएल में स्थित है, जहां मुझे एक डोमेन जोड़ना है।मैं

var url = "http://remote/server/rest/call";

बदल

var url = "http://remote.mydomain.com/server/rest/call";

करने के लिए और यह काम करता है!

मुझे लगता है कि पहला यूआरएल काम करना चाहिए क्योंकि यह एक ही यूआरएल और सेटिंग्स के साथ एक आईफोन ऐप पर काम करता है। इसमें डबल फ़ायरवॉल (विंडोज़ और ईएसईटी फ़ायरवॉल) के साथ कुछ भी करना है जहां मैंने विंडोज फ़ायरवॉल बंद कर दिया है।

वैसे भी, आपके उत्तरों के लिए धन्यवाद!

+0

आपकी समस्या ठीक हो सकती है लेकिन यह उत्तर नहीं है जो क्रॉस-डोमेन-अनुरोध समस्या हल करता है – Asqan

0

dataType:jsonp सेट करने का प्रयास करें और crossDomain:true क्रॉस डोमेन AJAX अनुरोधों के लिए आप jsonp का उपयोग कर सकते हैं। http://api.jquery.com/jQuery.ajax/

या आप कॉलबैक = जोड़ सकते हैं? अपने यूआरएल के लिए।

+0

मैंने पहले ही सुझाव दिया है कि आप क्या सुझाव देते हैं, लेकिन यह काम नहीं करता है। अभी भी एक ही समस्या है। आपके उत्तर के लिए धन्यवाद। – weerd2

+2

JSONP एक क्रॉस डोमेन POST – contactmatt

10

आपको अपने बाहरी डोमेन को श्वेतसूची में डालना होगा। बस अपने फोनगैप/कॉर्डोवा प्लेस्ट फ़ाइल पर एक्सकोड में जाएं और एक नई प्रविष्टि जोड़ें, इसका मूल्य हो * और आप वहां किसी भी वेबसाइट तक पहुंच सकते हैं।

यह भी पता है कि यह एक ब्राउज़र में काम नहीं करेगा। ब्राउज़र में क्रॉसडोमेन समस्याएं हैं, फोनगैप या मोबाइल डिवाइस नहीं।

+1

वास्तव में प्रतिस्थापित नहीं करता है ... यदि आप 'फ़ाइल: //' के माध्यम से लोड करते हैं तो यह सफारी में काम कर सकता है, लेकिन क्रोम और एफएफ कोई नहीं है ... – Devgeeks

+7

आप इसे काम करने के लिए प्राप्त कर सकते हैं वेब सुरक्षा अक्षम करके क्रोम। विंडोज रन> 'क्रोम - डिस्सेबल-वेब-सुरक्षा' मैक ओएस '> सुडो/एप्लिकेशन/Google \ क्रोम.एप/सामग्री/मैकोज़/Google \ क्रोम - डिसेबल-वेब-सुरक्षा - सक्षम-भौगोलिक स्थान ' – Peter

+0

आपकी प्रतिक्रियाओं के लिए धन्यवाद दोस्तों, लेकिन यह अभी भी काम नहीं करता है। अनुरोध पूरा होने पर अभी भी त्रुटि कार्य चल रहा है। मुझे लगता है कि यह सर्वर सेटिंग्स के साथ कुछ करने के लिए है। मैं इसे अभी देख लूंगा और आपको अद्यतित रखूंगा! – weerd2

3

config.xml को यह जोड़ा जा रहा है मुझे

<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" version="1.1.1" /> 
<access origin="*" /> 
<allow-navigation href="*" /> 
<allow-intent href="*" /> 

मैं क्यों किसी भी बाहर संसाधन लोड नहीं किया गया था को विस्मित कर बचाया, यहां तक ​​कि नक्शे और मेरे दूरस्थ डीबगिंग टूल गूगल। यह मुझे बचाया!

+0

यह वास्तव में सहायक था! – Schiavini

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