2012-11-08 32 views
11

Xin chào mọi người và thanx trước. Tôi đang sử dụng Phonegap 2.1.0. Trong mọi danh sách trắng được chấp nhận ..Bài đăng Ajax không hoạt động - Jquery Phonegap Android

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

Tôi đang sử dụng chức năng này để gọi một file php từ xa từ máy chủ web trường đại học của tôi:

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

file PHP chỉ là vì những lý do gỡ lỗi như thế này:

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

Nhưng ajax yêu cầu không xảy ra .. trong eclipse tôi tiếp tục nhận được lỗi này khi tôi bấm nộp:

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

hơn nữa, tôi quên thêm, là tôi có thể mở url dưới dạng liên kết từ trình giả lập. Nó hoạt động tốt.

* đang 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> 

Tôi đã tìm kiếm Tôi nghĩ khá nhiều toàn bộ web ... 2 ngày tìm kiếm ... tất cả mọi thứ đã được thử nghiệm .. Thanx rất nhiều.

+1

URL là 'http: // -/smartphone/login.php' có hợp lệ không? Nó không có vẻ như với tôi. –

+1

- viết tắt của tên miền..như mydomain.example.com .. Tôi xin lỗi nếu điều này bị hiểu lầm .. – gnnpls

+0

Thử thêm tiêu đề HTTP Access-Control-Allow-Origin: * "ở phía PHP, xem nó có hoạt động hay không. – onon15

Trả lời

3

Cuối cùng, sau 4-5 ngày tìm kiếm..điều gì đó đã hiệu quả đối với tôi .. Tôi vừa thêm return false sau cuộc gọi lại ajax. Và tôi đã thay đổi mã như sau:

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

Bây giờ vấn đề duy nhất là nó không thiết lập lại trang khi successful..but một bước lúc ...

2

Tôi nghĩ nguyên nhân là do "Gửi biểu mẫu". Bạn đã đặt mã ajax của mình ở đâu? Trong index.js?

Ngoại lệ bạn có nghĩa là "0 == Trang đang tải."

Trong trường hợp của bạn, tôi đoán bạn đặt mã ajax của bạn trong index.js trong cùng một trang với biểu mẫu. Khi bạn gửi biểu mẫu, trình duyệt bắt đầu tải trang hiện tại và trang tải xuống với kết quả gửi biểu mẫu. Vì vậy, mã ajax của bạn có được ngoại lệ "Trang được dỡ hàng".

Cố gắng không sử dụng Gửi biểu mẫu.

+0

Đánh dấu thanx rất nhiều để thử .. Nhưng tôi đã thử cả hai và không có gì xảy ra. Tôi biết ý nghĩa erroe là gì .. Có thể nào đó trong tệp androidmanifest.xml hoặc cordova.plist của tôi không? – gnnpls

+0

tôi nghĩ rằng nó sẽ không bao giờ làm việc .. tôi không biết tại sao .. dù trong localhosts hoạt động .. tôi không biết nơi mà vấn đề có thể là .. – gnnpls

+0

thực sự, khi tôi loại bỏ "hình thức", chỉ cần cho phép ajax gọi php trực tiếp, nó hoạt động . ví dụ, bạn có thể thêm cuộc gọi ajax của bạn trong hàm listner event deviceready. Và sau đó xem kết quả. – mark

3

Bước 1: Bạn cần bao gồm hai phần đầu trong tập tin php của bạn

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

Bước 2: Và bao gồm thư viện jquery cdn trong trang index của bạn.

bước 3: sử dụng kịch bản để gửi các hình thức thành công

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

Tôi đã thử nghiệm nó trong PhoneGap và nó đang làm việc tốt.

Các vấn đề liên quan