2015-09-16 2 views
5

Я пытаюсь отправить данные в локальную страницу в качестве данных POST, из приложения PhoneGap, что я работаю с помощью JQuery:PhoneGap + JQuery Ajax сообщение не работает

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

на моей api_return.php странице у меня есть следующий код:

<?php 
print_r($_REQUEST); 
?> 

странным является то, что если я делаю url: "http://.../api_return.php?test=true", тогда мой PHP возвращает test=true, я не могу получить его, чтобы вернуть POST данных.

Я пробовал:
<access origin="*" /> в config.xml
<uses-permission android:name="android.permission.INTERNET" /> в AndroidManifest.xml

ответ

3

Мне удалось заставить его работать, но, к сожалению, я не знаю, какое изменение привело к этой работе. Вот список изменений, которые я сделал:

1) добавить <access origin="*" /> в config.xml

2) добавить <uses-permission android:name="android.permission.INTERNET" /> в AndroidManifest.xml

3) добавить connect-src *; внутри content="" для мета-тега: <meta http-equiv="Content-Security-Policy" content="" />

4) Обернутые данные в JSON.stringify. Завершение вызова 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) Перенаправление ко второму URL (тот, который не использовал RewriteCond в папке .htaccess)

+0

Не могли бы вы предоставить дополнительную информацию? Возможно, вы увидите файл .htaccess и сделанные вами html-изменения. Я изо всех сил пытаюсь понять это правильно. – FredFury

0

Я думаю, что проблема может быть связана с PHP:

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

Нет, проверено, что оно также возвращает 'Данные сохранены: []' = blank:/ – DanceSC

0

Для Вашего $ .ajax некоторые версии JQuery известны проблемы для установки метода. Вместо этого используйте «тип».

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

Просто попробовал это, а еще ничего, я думаю, что это связано с cordova/phonegap, потому что я знаю, что код работает нормально , Я пробовал тип:/method: and success:/.done – DanceSC

+0

Является ли ваш код завернутым в 'deviceready'? –

+0

Да 'receivedEvent: function (id) {' как я сказал выше, он отлично работает, если я использую GET, проблема заключается в том, что для принимающей стороны требуются данные POST. – DanceSC

1

Вы также можете проверить на "Content-type":"application/x-www-form-urlencoded" в заголовке вашего запроса.

Может случиться так, что вы сможете найти свой пост в raw php://input, но не можете найти в $_POST, если вы пришлете без "Content-type":"application/x-www-form-urlencoded".

0

Используя ваши варианты, я застрял в этом некоторое время. Я понял, что вариант 3 является важным!

  1. Добавить в config.xml
  2. Добавить в AndroidManifest.XML
  3. Присвоить connect-src *; к content="" для мета-тега: <meta http-equiv="Content-Security-Policy" content="" />

ошибка, что я видел, было что-то вроде:

не удалось выполнить 'открытым' на 'XMLHttpRequest' отказался connect

Итак, это то, что я использовал для Содержание политики безопасности:

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

И это сработало!

+0

Спасибо за редактирование. Довольно новый для stackoverflow. – bitanath

Смежные вопросы