2015-09-16 16 views
5

Tôi cố gắng để gửi dữ liệu đến một trang địa phương như dữ liệu POST, từ một ứng dụng PhoneGap mà tôi đang làm việc về việc sử dụng jQuery:PhoneGap + jQuery Ajax bài viết không làm việc

$.ajax({ 
      method: "POST", 
      url: "http://.../api_return.php", 
      data: { name: "John", location: "Boston" } 
     }) 
      .done(function(msg) { 
      alert("Data Saved: " + msg); 
      }); 

trên trang api_return.php của tôi, tôi có mã sau:

<?php 
print_r($_REQUEST); 
?> 

điều kỳ lạ là nếu tôi làm cho url: "http://.../api_return.php?test=true", sau đó php của tôi trả về test=true, tôi không thể làm cho nó trở POST dữ liệu.

Tôi đã thử:
<access origin="*" /> trong config.xml
<uses-permission android:name="android.permission.INTERNET" /> trong AndroidManifest.xml

Trả lời

3

Tôi đã cố gắng làm cho nó hoạt động, nhưng tiếc là tôi không biết thay đổi nào đã kết thúc công việc này. Dưới đây là một danh sách các thay đổi mà tôi thực hiện:

1) thêm <access origin="*" /> trong config.xml

2) thêm <uses-permission android:name="android.permission.INTERNET" /> trong AndroidManifest.xml

3) thêm connect-src *; bên trong content="" cho thẻ meta: <meta http-equiv="Content-Security-Policy" content="" />

4) Dữ liệu được gói trong JSON.stringify. Kết thúc cuộc gọi ajax:

$.ajax({ 
    type: "POST", 
    url: "http://www.example.com/apicallback.php", // Example 
    data: JSON.stringify({ "name": "John", "location": "Boston" }), 
    success: function(response) { 
     console.log(response); 
     alert(JSON.stringify(response)); 
    }, 
    error: function(e) { 
     alert('Error: ' + e.message); 
    } 
}); 

5) chuyển hướng đến một URL thứ hai (một trong đó đã không sử dụng RewriteCond trong thư mục .htaccess)

+0

Bạn có thể vui lòng cung cấp thêm một số thông tin không? Có thể hiển thị tệp .htaccess và các thay đổi html bạn đã thực hiện. Tôi đã đấu tranh để có được quyền này. – FredFury

0

Tôi nghĩ rằng vấn đề có thể là với PHP của bạn:

<?php 
    echo json_encode($_POST); 
?> 
+0

Không, thử nghiệm như vậy, nó trả về 'Dữ liệu đã lưu: []' = trống:/ – DanceSC

0

Đối với $ .ajax bạn một số phiên bản của JQuery đã biết các vấn đề về cài đặt phương thức. Thay vào đó, hãy sử dụng "loại".

$.ajax({ 
     url: "http://.../api_return.php", 
     data: { name: "John", location: "Boston" }, 
     cache: false, 
     type: 'POST', 
     success: function (data) { 
      alert(data); 
      console.log(data) 
     } 
    }); 
+0

Chỉ cần thử điều này và vẫn không có gì, tôi nghĩ nó liên quan đến cordova/phonegap vì tôi biết mã hoạt động bình thường , Tôi đã thử loại:/method: và thành công:/.done – DanceSC

+0

Mã của bạn có được bao bọc trong 'deviceready' không? –

+0

Có 'receiveEvent: function (id) {' như tôi đã nói ở trên, nó hoạt động tốt nếu tôi đang sử dụng GET vấn đề là kết thúc nhận yêu cầu dữ liệu POST. – DanceSC

1

Bạn cũng có thể kiểm tra trên "Content-type":"application/x-www-form-urlencoded" trong tiêu đề yêu cầu của bạn.

Có thể xảy ra rằng bạn có thể tìm thấy bài đăng của mình trong raw php://input nhưng không thể tìm thấy trong $_POST nếu bạn gửi mà không cần "Content-type":"application/x-www-form-urlencoded".

0

Sử dụng các tùy chọn của bạn Tôi đã bị kẹt ở đây một lúc. Tôi nghĩ rằng tùy chọn 3 là lựa chọn quan trọng!

  1. Thêm vào config.xml
  2. Thêm vào AndroidManifest.xml
  3. Gán connect-src *;-content="" cho thẻ meta: <meta http-equiv="Content-Security-Policy" content="" />

Các lỗi mà tôi thấy được một cái gì đó như:

thất bại trong việc thực hiện 'mở' bật 'XMLHttpRequest' từ chối kết nối

Vì vậy, đây là những gì tôi đã sử dụng cho Content Security Policy:

<meta http-equiv="Content-Security-Policy" 
    content="default-src * 'self' 'unsafe-inline' data: gap: 'unsafe-eval'; 
    style-src * 'self' 'unsafe-inline'; 
    connect-src * ; 
    script-src * 'self' 'unsafe-inline'; 
    media-src *"> 

Và nó làm việc!

+0

Cảm ơn bạn đã chỉnh sửa. Khá mới mẻ đối với stackoverflow. – bitanath

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