Phonegap + jQuery Ajax Post无效

时间:2015-09-16 20:46:25

标签: jquery ajax cordova

我正在尝试使用jQuery从我正在使用的phonegap应用程序将数据作为POST数据发送到本地页面:

 $.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中 AndroidManifest.xml中的<uses-permission android:name="android.permission.INTERNET" />

5 个答案:

答案 0 :(得分:4)

我设法让它工作,但不幸的是我不知道哪个改变最终使这项工作。以下是我所做的更改列表:

1)在config.xml中添加<access origin="*" />

2)在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />

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)重定向到第二个网址(在.htaccess文件夹中没有使用RewriteCond的网址)

答案 1 :(得分:2)

您也可以在请求标题中查看"Content-type":"application/x-www-form-urlencoded"

您可能会在原始php://input中找到您的帖子输入,但如果您在没有$_POST的情况下发送,则无法在"Content-type":"application/x-www-form-urlencoded"中找到。

答案 2 :(得分:0)

我认为问题可能在于您的PHP:

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

答案 3 :(得分: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)
        }
    });

答案 4 :(得分:0)

使用你的选项我被困在这一段时间了。我认为选项3是重要的一个!

  1. 添加config.xml
  2. 添加AndroidManifest.xml
  3. connect-src *;分配给content=""元标记:<meta http-equiv="Content-Security-Policy" content="" />
  4. 我看到的错误是:

      

    无法在'xmlhttprequest'上执行'open'拒绝连接

    所以,这就是我用于内容安全政策

    的内容
    <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 *">
    

    它有效!