【问题标题】:Phonegap + jQuery Ajax Post not workingPhonegap + jQuery Ajax Post 不工作
【发布时间】:2015-09-16 20:46:25
【问题描述】:

我正在尝试从我正在使用 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 数据。

我已尝试:
config.xml 中的&lt;access origin="*" /&gt;
AndroidManifest.xml 中的&lt;uses-permission android:name="android.permission.INTERNET" /&gt;

【问题讨论】:

    标签: jquery ajax cordova


    【解决方案1】:

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

    1) 在config.xml中添加&lt;access origin="*" /&gt;

    2) 在AndroidManifest.xml 中添加&lt;uses-permission android:name="android.permission.INTERNET" /&gt;

    3) 在content="" 中添加connect-src *; 用于元标记:&lt;meta http-equiv="Content-Security-Policy" content="" /&gt;

    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(未在 .htaccess 文件夹中使用 RewriteCond 的 URL)

    【讨论】:

    • 您能否提供更多信息?也许显示 .htaccess 文件和您所做的 html 更改。我一直在努力做到这一点。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 不,也测试过,它返回Data Saved: [] = blank :/
      【解决方案4】:

      对于您的 $.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)
              }
          });
      

      【讨论】:

      • 刚刚也试过了,还是没有,我认为它与cordova / phonegap有关,因为我知道代码工作正常,我试过 type:/method: 和 success:/.done
      • 是的 receivedEvent: function(id) { 就像我上面说的,如果我使用 GET 可以正常工作,问题是接收端需要 POST 数据。
      • 不明白为什么会有问题,我建议使用像 Fiddler 这样的工具,看看网络层面发生了什么。 telerik.com/fiddler
      【解决方案5】:

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

      1. 在config.xml中添加
      2. 在 AndroidManifest.xml 中添加
      3. connect-src *; 分配给content="" 用于元标记:&lt;meta http-equiv="Content-Security-Policy" content="" /&gt;

      我看到的错误类似于:

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

      它成功了!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 2013-02-20
        相关资源
        最近更新 更多