2013-03-28 17 views
5

Witam Zajmuję się tworzeniem aplikacji dla Androida (użyj phonegap, html5 i javascript), które łączą się ze zdalną bazą danych mysql. Stworzyłem usługi WWW RESTful (codeigniter), aby uzyskać dostęp do bazy danych mysql, a następnie aplikacja Android może wywołać usługę sieci Web, aby uzyskać lub opublikować dane do bazy danych, używając formatu XML lub JSON jako formatu danych.uzyskać dane z serwera z jquery ajax w android phonegap

W przeglądarce internetowej, używając jquery ajax, z powodzeniem uzyskuję wynik, ale w aplikacji na Androida nie otrzymuję odpowiedzi.

jQuery.ajax({ 
url : 'http://10.10.1.129/index.php/apiauth/auth/?'+jQuery("#form-login").serialize(), 
async :true, 
cache :false, 
/*crossDomain : true,*/ 
dataType : 'jsonp', 
success:function(data){ 
    alert(data); 
    } 
}); 

w serwerze:

require APPPATH.'/libraries/REST_Controller.php'; 
    class Apiauth extends REST_Controller 
    { 
     function auth_get() 
     { 
      $this->load->model('mauth'); 
      $username = $this->input->get('username') ? $this->input->get('username') : $this->get('username'); 
      $password = $this->input->get('password') ? $this->input->get('password') : $this->get('password'); 
      $auth  = $this->mauth->getUserLogin('*',$username,$password); 
      $row  = $auth->row(); 
      if($row){ 
       $data = array('username'=>$row->username, 'fullname'=>$row->fullname,'error'=>FALSE); 
      }else{ 
       $data = array('error'=>true); 
      } 
      $this->response($data, 200); 
     } 
+0

Nie widzę tutaj żadnego kodu Androida ...? – Tushar

+0

ups Przepraszam, używam phonegap, html5 i javascript do opracowywania aplikacji na Androida – Aditya

Odpowiedz

5

Czy dodano pochodzenie dostępowy z adresem IP określonym w żądaniu ajax? Ten plik znajduje się w katalogu dir/res/xml/config.xml localhost jest domyślnie dozwolony, ale musisz dodać inne hosty, gdy używasz. Więc config.xml powinien wyglądać ten

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
     Licensed to the Apache Software Foundation (ASF) under one 
     or more contributor license agreements. See the NOTICE file 
     distributed with this work for additional information 
     regarding copyright ownership. The ASF licenses this file 
     to you under the Apache License, Version 2.0 (the 
     "License"); you may not use this file except in compliance 
     with the License. You may obtain a copy of the License at 

     http://www.apache.org/licenses/LICENSE-2.0 

     Unless required by applicable law or agreed to in writing, 
     software distributed under the License is distributed on an 
     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
     KIND, either express or implied. See the License for the 
     specific language governing permissions and limitations 
     under the License. 
--> 
<cordova> 
    <!-- 
    access elements control the Android whitelist. 
    Domains are assumed blocked unless set otherwise 
    --> 

    <access origin="http://127.0.0.1*"/> <!-- allow local pages --> 
    <access origin="http://10.10.1.129*"/> <!-- allow requests from your server --> 


    <!-- <access origin="https://example.com" /> allow any secure requests to example.com --> 
    <!-- <access origin="https://example.com" subdomains="true" /> such as above, but including subdomains, such as www --> 
    <access origin=".*"/> 

    <log level="DEBUG"/> 
    <preference name="useBrowserHistory" value="false" /> 
<plugins> 
    <plugin name="App" value="org.apache.cordova.App"/> 
    <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/> 
    <plugin name="Device" value="org.apache.cordova.Device"/> 
    <plugin name="Accelerometer" value="org.apache.cordova.AccelListener"/> 
    <plugin name="Compass" value="org.apache.cordova.CompassListener"/> 
    <plugin name="Media" value="org.apache.cordova.AudioHandler"/> 
    <plugin name="Camera" value="org.apache.cordova.CameraLauncher"/> 
    <plugin name="Contacts" value="org.apache.cordova.ContactManager"/> 
    <plugin name="File" value="org.apache.cordova.FileUtils"/> 
    <plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager"/> 
    <plugin name="Notification" value="org.apache.cordova.Notification"/> 
    <plugin name="Storage" value="org.apache.cordova.Storage"/> 
    <plugin name="Temperature" value="org.apache.cordova.TempListener"/> 
    <plugin name="FileTransfer" value="org.apache.cordova.FileTransfer"/> 
    <plugin name="Capture" value="org.apache.cordova.Capture"/> 
    <plugin name="Battery" value="org.apache.cordova.BatteryListener"/> 
    <plugin name="SplashScreen" value="org.apache.cordova.SplashScreen"/> 
</plugins> 
</cordova> 
+0

wow, dziękuję, to działa ... – Aditya

+0

Wygląda na to, że Phonegap zaczął zwracać uwagę na to ustawienie dopiero po wersji 2.3.0. Miałem wpisy określone przez Josha, ale zawierały błąd w pisowni w nazwie domeny. Wszystko działało dobrze pod Cordova/Phonegap 2.3.0. Po uaktualnieniu do wersji V2.7.0 AJAX wywoła funkcję sukcesu, jednak odpowiedź zawsze będzie miała wartość zerową. Kiedy poprawiłem błąd w pisowni - bingo wszystko znów działało. Znalazłem element subdomains = "true", który jest szczególnie przydatny, ponieważ musimy zezwolić na nazwę domeny z lub bez "www", jak sugerują komentarze. –

0

<access origin=".*"/> nie zrobił pracował w ogóle, musimy umieścić konkretny adres URL, który nazywamy podczas ajax żądanie.

<access origin="http://10.10.1.129"/> to działało.

Powiązane problemy