jQuery AJAX POST在Phonegap Build中无法正常工作

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)时,该应用作为网页应用程序可以很好地运行。但是,在使用Phonegap Build制作的Android应用程序中无法正常工作。
如果有人能够查看此问题,我将不胜感激。

1
错误或成功回调是什么? - Alex Pereira
1
尝试添加错误回调处理程序,以便您可以查看HTTP状态代码或错误消息。您能确定Android的请求是否到达了您的服务器吗? - Nick Roth
我添加了error: function (xhr, ajaxOptions, thrownError) { alert("错误状态: " + xhr.status + " ajax选项: " + ajaxOptions + " 抛出的错误: " + thrownError); } - Naveed Anjum
我遇到了一个500内部服务器错误(“errorstatus: 500 ajaxoptions: error throwError: Internal Server Error”)。当我使用file://在我的Web浏览器上访问该文件时,我也会遇到相同的错误。@AlexPereira - Naveed Anjum
2
500错误表示服务器在处理请求时出现问题。您应该检查确保您的服务正常工作,并且您发送了所有必要的数据以便服务能够处理您的请求。 - Nick Roth
1
好的。我已经解决了。这是因为我们服务器端代码出现了问题,当尝试从请求对象中检索URLReferrer时抛出错误,而在从file:/// URL调用时为NULL。 - Naveed Anjum
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=".*"/>

将这些添加到PhoneGap根目录下的www文件夹中的config.xml中,如果您想使用例如phonegap local build ios,那么这样做可能比将它们添加到平台配置中更好。 - sffc

2
经过多个小时的研究,我得出的答案是,在我使用的Android 4.03设备上,通过PhoneGap默认设置的Android WebView不支持XHReq POST。Tcpdump显示请求确实从设备中发出,针对正确的主机和路径,但是以GET方式进行,没有POST数据。我检查了白名单(PhoneGap默认为“*”,因此不是问题),确保这不是“POST缓存”问题(通过在请求URL中添加?t=),并确保我只进行异步请求。结果相同;POST变成了GET,并且所有的POST数据都丢失了。
我的解决方案是切换到使用GET来完成此功能,以避免需要发送POST数据,通过像"http://mydomain.com/endpoint?post-data=url-encoded-data-here&t=timestamp-here"这样的URL来实现。这只有当我也能控制服务器端时才可行,将端点更改为如果以这种方式内联数据,则可以通过GET执行先前仅限于POST的操作。
更新:由于其他原因(请参见帖子#21192670),我回到了这个问题。
POST请求失败的原因是我的域名的MX配置以及在引用它时选择(或缺乏)子域名。我在POST URL中使用了根域名,但MX记录将其指向了wwww.mydomain.com,然后将其指向了正确的IP地址。POST请求没有通过该重定向。

我目前也遇到了完全相同的问题,但似乎无法解决它(真的不想将 AJAX 请求更改为“GET”请求)。 - tommybond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接