2012-11-08 27 views
11

Ciao a tutti e grazie in anticipo. Sto usando Phonegap 2.1.0. In whitelist tutto è accettato ..Post Ajax non funzionante - Jquery Phonegap Android

**<access uri="*" subdomains="true" /> 
<access origin=".*" subdomains="true"/>** 

sto usando questa funzione per richiamare un file php remota dal mio server web dell'università:

var postData = $(this).serialize();    
       $.ajax({ 
        type: 'POST', 
        url: 'http://--/smartphone/login.php', 
        dataType : 'json', 
        data: postData,   
        success: function(data){ 
         alert("good"); 
        }, 
        error: function(){ 
         alert('problem!'); 
        } 
       }); 

IL file php è solo per motivi di debug in questo modo:

<?php 
header('Content-Type: application/json'); 
$sample = array(
    'name'=>'My Name', 
    'email'=>'[email protected]' 
); 
echo json_encode($sample); 
?> 

Ma ajax richiesta non sta accadendo .. in Eclipse I Continuo a ricevere questo errore quando clicco presento:

JSCallback Error: Request failed with status 0 at file:///android_asset/www/js/cordova-2.1.0.js:3743 

Inoltre, ho dimenticato di aggiungere, è che posso aprire l'url come collegamento dall'emulatore. Funziona bene.

* codice html : *

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" type="text/css" href="css/index.css" /> 
    <script type="text/javascript" charset="utf-8" src="js/cordova-2.1.0.js"></script> 
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <title>Smart Greenhouse</title> 
</head> 
<body> 
    <div id="container"> 
     <img src="css/images/smart_green_house.png" class="logo" alt="l1ogo" /> 
     <form id="login_form" class="first_display" > 
      <label class="title"> E-mail:</label> 
      <input id="1" type="email" class="input" size="45" name="email" /> 
      <label class="title"> password:</label> 
      <input id="2" type="password" class="input" size="45" name="password" /> 
      <input id="3" class="submit_type" type="submit" value="login" /> 
     </form> 
    </div> 
</body> 
</html> 

ho cercato penso praticamente l'intero web ... 2 giorni Ricerca ... tutto è stato testato .. Grazie mille.

+1

'' http: // -/smartphone/login.php' è un URL valido? Non mi sembra. –

+1

- sta per il dominio ... come mydomain.example.com .. Mi scuso se questo è frainteso .. – gnnpls

+0

Prova ad aggiungere "Access-Control-Allow-Origin: *" HTTP-header sul lato PHP, controlla se funziona. – onon15

risposta

3

Infine, dopo 4-5 giorni di ricerca ... qualcosa ha funzionato per me..ho appena aggiunto return false dopo il callback ajax. E ho cambiato il codice come segue:

$('form').submit(function(e){  
    if (password_ok==1 && email_ok==1) 
      { 
       var postData = $(this).serialize(); 
       $.ajax({ 
        type: 'POST', 
        url: 'http://mysite.xx.x/smartphone/login.php', 
        dataType : 'json', 
        data: postData,   
        success: function(data){ 
         alert(data); 
        }, 
        error: function(){ 
         alert('error!'); 
        } 
       }); 
      } 
     else 
      { 
      e.preventDefault(); 
      if (email_ok==2) 
       { 
       $("#1").css("border-color","red"); 
       $("#1").css("background-color","#FFD8CE"); 
       } 
      if (password_ok==2) 
       { 
       $("#2").css("border-color","red"); 
       $("#2").css("background-color","#FFD8CE"); 
       } 
      } 
    return false;  
    }); 

Ora l'unico problema è che non ripristina la pagina quando successful..but un passo alla volta ...

2

Penso che il motivo sia causato dalla "Sottomissione modulo". Dove hai messo il tuo codice Ajax? Nel file index.js?

L'eccezione che si ottiene significa "0 == La pagina si sta scaricando".

Nel tuo caso, suppongo che tu abbia inserito i tuoi codici Ajax in index.js che si trova nella stessa pagina del modulo. Quando si invia il modulo, il browser inizia a scaricare la pagina corrente e carica la pagina con i risultati dell'invio del modulo. Quindi i tuoi codici Ajax ottengono l'eccezione "La pagina sta scaricando".

Cerca di non utilizzare l'invio del modulo.

+0

Mark thanx molto per il try..Mut ho provato entrambi e non è successo niente. So qual è il significato di erroe .. Potrebbe essere qualcosa nel mio file androidmanifest.xml o cordova.plist? – gnnpls

+0

penso che non funzionerà mai..non so perché ... in localhost funziona ... non so dove potrebbe essere il problema .. – gnnpls

+0

in realtà, quando rimuovo "form", lascia che sia ajax a chiamare php direttamente, funziona . ad esempio, è possibile aggiungere la chiamata ajax nella funzione listner di eventi deviceready. E poi vedi il risultato. – mark

3

Fase 1: È necessario per includere due intestazioni nel file php

header('Content-Type: application/json'); 
header("Access-Control-Allow-Origin: *"); 

Fase 2: E includere libreria jQuery CDN nella vostra pagina di indice.

fase 3: Usa script per pubblicare il modulo con successo

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('form').submit(function(e) { 
      var postData = $(this).serialize(); 
      $.ajax({ 
       type : 'POST', 
       url : 'http://www.yoururl/test.php', 
       dataType : 'json', 
       data : postData, 
       success : function(data) { 
        alert(data); 
       }, 
       error : function() { 
        alert('error!'); 
       } 
      }); 

      return false; 
     }); 
    }); 
</script> 

Ho testato in PhoneGap e si sta lavorando bene.