【问题标题】:jQuery AJAX POST does not work with Phonegap BuildjQuery AJAX POST 不适用于 Phonegap Build
【发布时间】:2013-02-20 00:31:42
【问题描述】:

我在使用 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 应用。

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

【问题讨论】:

  • 什么是错误或成功回调?
  • 尝试添加一个错误回调处理程序,这样您就可以看到 HTTP 状态代码是什么或错误消息是什么。您能否确定来自 Android 的请求是否到达您的服务器?
  • 我添加了error: function (xhr, ajaxOptions, thrownError) { alert("errorstatus: " + xhr.status + " ajaxoptions: " + ajaxOptions + " throwError: " + thrownError); }
  • 500 错误表示服务器在处理请求时出现问题。您应该检查以确保您的服务正常工作,并且您正在发送服务处理您的请求所需的所有数据。
  • 好的。我得到了这个工作。这是我们的服务器端代码在尝试从 Request 对象中检索 URLReferrer 时抛出错误的问题,当从 file:/// URL 调用时该 URLReferrer 为 NULL。

标签: jquery ajax cordova post build


【解决方案1】:

您需要在“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=".*"/>

【讨论】:

  • 将这些添加到 phonegap 根 www 目录中的 config.xml 可能比将它们添加到平台配置中更好,如果您喜欢使用,例如,phonegap local build ios
【解决方案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 没有通过该重定向。

【讨论】:

  • 我目前遇到了同样的问题,但似乎无法解决(真的宁愿不将 AJAX 请求更改为“GET”请求)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多