2012-11-08 20 views
11

Witam wszystkich i z góry. Używam Phonegap 2.1.0. na białej liście wszystko jest akceptowane ..Posta Ajax nie działa - Jquery Phonegap Android

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

używam tej funkcji, aby zadzwonić do zdalnego pliku php z mojego uniwersytetu serwer internetowy:

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!'); 
        } 
       }); 

pliku php jest tylko ze względów debugowania, takich jak ten:

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

Ale ajax żądanie nie dzieje .. w Eclipse ciśgle ten błąd po kliknięciu przedłożyć:

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

Co więcej, zapomniałem dodać, że mogę otworzyć adres URL jako link z emulatora. Działa dobrze.

* kod 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> 

Przeszukałem myślę prawie całej sieci ... 2 dni szuka ... wszystko zostało przetestowane .. Niż dużo. ..

+1

Czy "http: // -/smartphone/login.php" jest prawidłowym adresem URL? To mi nie wygląda. –

+1

- oznacza domenę .. podobnie jak mydomain.example.com. Przepraszam, jeśli jest to źle zrozumiane. – gnnpls

+0

Spróbuj dodać "Access-Control-Allow-Origin: *" HTTP-header po stronie PHP, sprawdź, czy to działa. – onon15

Odpowiedz

3

Wreszcie, po 4-5 dniach szukania ... coś mi się udało ... Właśnie dodałem return false po wywołaniu ajax. I zmieniłem kod w następujący sposób:

$('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;  
    }); 

Teraz jedynym problemem jest to, że nie resetuje stronę kiedy successful..but jeden krok na raz ...

2

Myślę, że przyczyną jest "przesłanie formularza". Gdzie umieściłeś swój kod ajax? W pliku index.js?

Wyjątek, który otrzymałeś oznacza "0 == Strona jest rozładowywana."

W twoim przypadku, umieszczam twoje kody ajax w index.js, który jest na tej samej stronie z formularzem. Po przesłaniu formularza przeglądarka rozpoczyna rozładowywanie bieżącej strony i ładowanie strony z wynikami przesyłania formularza. Więc twoje kody ajaxowe otrzymują wyjątek "Strona jest rozładowywana".

Staraj się nie używać przesyłania formularzy.

+0

Mark thanx za próbę .. Ale spróbowałem i nic się nie stało. Wiem co to jest erroe. Czy może to być coś w moim pliku androidmanifest.xml lub cordova.plist? – gnnpls

+0

Myślę, że to nigdy nie zadziała..i nie wiem dlaczego..nie w localhosts działa..i nie wiem gdzie problem może być .. – gnnpls

+0

właściwie, kiedy usuwam "formularz", po prostu pozwól ajaxowi wywołać php bezpośrednio, to działa . na przykład, możesz dodać swoje wywołanie ajax w funkcji listy zdarzeń deviceready. A potem zobacz wynik. – mark

3

Krok 1: Musisz obejmuje dwa nagłówki w pliku php

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

Step 2: A to cdn jquery biblioteki na stronie indeksu.

krok 3: użycie skrypt aby umieścić postać powodzeniem

<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> 

Ja testowałem go w PhoneGap i to działa dobrze.

Powiązane problemy