Jquery Ajax在IOS 9.0 Cordova中不起作用
我得到的结果是:Jquery Ajax在IOS 9.0 Cordova中不起作用,jquery,ajax,cordova,Jquery,Ajax,Cordova,我得到的结果是: $.ajax({ type: "GET", url: "http://myweb/php", success: function (data){ alert(data); }, error:function(xhr,textStatus,err) { alert("readyState: " + xhr.readyState); alert("responseText: "+ xhr
$.ajax({
type: "GET",
url: "http://myweb/php",
success: function (data){
alert(data);
},
error:function(xhr,textStatus,err)
{
alert("readyState: " + xhr.readyState);
alert("responseText: "+ xhr.responseText);
alert("status: " + xhr.status);
alert("text status: " + textStatus);
alert("error: " + err);
}
});
我尝试在我的php中添加header,但仍然不起作用。ajax代码在我将xcode更新到7.0和ios模拟器更新到9.0之前工作
readyState:0
responseText:""
status:0
text status:error
error:""
如果您在Xcode项目中工作,可能需要编辑
info.plist
文件。安全性随着iOS9而改变。苹果强烈建议在可能的情况下使用https进行网络请求。这是一个与这个问题相关的答案
从该职位:
将其添加到info.plist文件中
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
NSAppTransportSecurity
NSAllowsArbitraryLoads
应用程序传输安全(ATS)在应用程序及其后端之间的安全连接中实施最佳实践。ATS防止意外泄露,提供安全的默认行为,易于采用;在iOS 9和OS X v10.11中,默认情况下它也是打开的。无论您是在创建新应用程序还是在更新现有应用程序,都应尽快采用ATS
如果你正在开发一个新的应用程序,你应该只使用HTTPS。如果你有一个现有的应用程序,你现在就应该尽可能多地使用HTTPS,并尽快创建一个迁移其余应用程序的计划。此外,您通过更高级别API进行的通信需要使用TLS 1.2版进行加密,并具有前向保密性。如果尝试建立不符合此要求的连接,则会引发错误。如果应用程序需要向不安全的域发出请求,则必须在应用程序的Info.plist文件中指定此域
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
就我对整个ATS(应用程序传输安全-iOS 9)的理解而言,28区推荐的方法不应该是您在应用程序中使用的方法
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
这将只允许对指定域的请求。所描述的方式就是苹果公司所采用的方式。正如你在屏幕截图上看到的,这是苹果希望用户使用它的方式
如果您没有指定任何内容,您将获得
无法加载网页,错误为:无法加载资源
因为应用程序传输安全策略要求使用安全的
连接
所以,像我说的那样改变它,错误就消失了。
对我来说,这是@area28和@Sithys答案的组合。因此,我最终将此添加到我的info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>domain.tld</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSExceptionDomains
example.domain.com
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
对于将来可能遇到这种情况的人。我也有同样的问题,结果是由于SSL证书是自签名的(开发服务器)。iOS 9 Cordova(UIWebView-不确定WKWebView)将以静默方式失败并返回readyState:0,responseText:,状态:0
Android 7没有这个问题。我同意。两者都会起作用,如果需要,你可以更具体。不是你可以,你应该更具体!在我看来,这些都是不可讨论的安全问题。第二种方法是将每个域都列为白名单,这绝对是可行的,第一种方法在iOS9之前的iOS中不起作用。(在iOS 7上测试)我面临着几乎相同的问题。我尝试了以上设置。同样的应用程序在我们的QA服务器中运行良好。但当我尝试连接到dev服务器时,它不工作。它返回{“readyState”:0,“status”:0,“statusText”:“Error:NETWORK\u ERR:XMLHttpRequest Exception 101”}这对我来说很有效。我的应用程序在将设备更新到iOS9后没有加载,现在它就像一个魔咒一样工作。救生员,谢谢!
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.domain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>