13

我在使用 Phonegap Build 的 Android 应用程序中执行 jQuery AJAX POST 时遇到问题。我已经添加了:

  1. Config.xml:设置访问来源 *
  2. 所有 HTML 文件:设置 $.support.cors = true; $.mobile.allowCrossDomainPages = true;
  3. 在远程服务器上:设置 Access-Control-Allow-Origin、Access-Control-Allow-Headers 的值

我一直在寻找答案。我浏览了几篇提供相互矛盾的信息的帖子,并且尝试了很多提到的解决方案,但都没有奏效。

这是我正在尝试做的事情:

$.ajax({
  type: "POST",
  url: "http://mydomain.com/mypage.aspx/myweb...",
  data: "{'sEnquiryText':'" + $("#textareaEnq")[0].value + "'}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data) { // Response function
    if (data.d == "Success")
      $("#lblInfoMsg").html("Enquiry sent successfully !");
    else
      $("#lblInfoMsg").html(data.d);
  }
});

当安装在不同的域 (myseconddomain.com/mywebapp) 以及本地 IIS (localhost/mywebapp) 上时,它可以作为 Web 应用程序正常工作。但它不适用于使用 Phonegap Build 制作的 Android 应用程序。

如果有人可以调查这个问题,我将不胜感激。

4

2 回答 2

6

您需要添加到“res/xml/config.xml”中,例如

<access origin="http://127.0.0.1*"/> <!-- allow local pages -->

<access origin="https://example.com" />

<access origin="https://example.com" subdomains="true" />

<access origin=".*"/>
于 2013-05-15T13:59:25.970 回答
2

几个小时后我得出的答案是,Android WebView 中不支持 XHReq POST,至少在我正在使用的 Android 4.03 设备上的 PhoneGap 的默认设置中;tcpdump 显示请求确实来自设备,对于正确的主机和路径,但作为 GET,没有发布数据。我检查了白名单(phonegap 默认当前为“*”,所以不是问题),确保这不是“POST 缓存”问题(通过在请求 url 中添加 ?t=),并确保我只发出异步请求. 结果相同;POST 以 GET 形式出现,所有发布数据都将丢失。

我的解决方案是切换到使用 GET 来执行此功能,以避免需要通过诸如“ http://mydomain.com/endpoint?post-data=url-encoded-data-here&t=timestamp-here之类的 url 发送帖子数据”。只有当我也可以控制它的服务器端时,这是可能的,如果数据以这种方式内联,则更改端点以允许以前仅通过 GET 进行 POST 操作。

更新:我回到这个问题,因为我真的希望 POST 出于其他原因工作(参见帖子 #21192670)。

POST 失败的原因是因为我的域的 MX 配置,以及在引用它时选择(或缺少)子域;我在 POST url 中使用了根域,但 MX 记录指向 wwww.mydomain.com,然后指向正确的 IP 地址。POST 没有通过该重定向。

于 2014-01-11T18:35:26.293 回答