Ajax在IOS 9.0 Cordova中不起作用

Joh*_*ong 7 ajax jquery 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.responseText);
        alert("status: " + xhr.status);
        alert("text status: " + textStatus);
        alert("error: " + err);
    }
});
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

readyState:0
responseText:""
status:0
text status:error
error:""
Run Code Online (Sandbox Code Playgroud)

我尝试在我的PHP中添加标题,但仍然无法正常工作.在我将xcode更新为7.0并将ios模拟器更新为9.0之前,ajax代码正常工作.

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
Run Code Online (Sandbox Code Playgroud)

Sit*_*hys 12

据我所知,整个ATS(App Transport Security - iOS 9)的东西,来自area28的推荐方法不应该是你在应用程序中使用的方法.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Run Code Online (Sandbox Code Playgroud)

这将允许对每个域的所有外部请求绝对不是您应该使用它的方式.在我看来,你应该<dict>在你的内部定义一个新的info.plist并添加这个代码(编辑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>
Run Code Online (Sandbox Code Playgroud)

这将仅允许对您指定的域的请求.描述的方式是苹果在WWDC 2015上介绍的方式.正如您在屏幕截图中看到的那样,这是苹果希望用户使用它的方式.

如果你没有指定任何东西,你会得到

无法加载错误的网页:无法加载资源,因为App Transport Security策略要求使用安全连接.

所以,像我说的那样改变它,错误就消失了. 在此输入图像描述

  • 不是你**可以**,你**应该**更具体!我认为这些都是安全话题,不值得讨论。 (2认同)

are*_*a28 5

如果您正在使用Xcode项目,则可能需要编辑该info.plist文件.安全性因iOS9而改变.Apple强烈建议尽可能使用https进行网络请求.以下是与此问题相关的答案.

从那篇文章:

将其添加到info.plist文件中.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Run Code Online (Sandbox Code Playgroud)

应用程序传输安全(ATS)在应用程序及其后端之间的安全连接中实施最佳实践.ATS防止意外泄露,提供安全的默认行为,并且易于采用; 它在iOS 9和OS X v10.11中默认也是打开的.无论您是创建新应用程序还是更新现有应用程序,都应尽快采用ATS.

如果您正在开发新应用,则应该专门使用HTTPS.如果您有现有应用,则应尽可能多地使用HTTPS,并创建一个计划,以便尽快迁移其余应用.此外,您通过更高级别的API进行的通信需要使用具有前向保密性的TLS 1.2版进行加密.如果尝试建立不符合此要求的连接,则会引发错误.如果您的应用需要向不安全的域发出请求,则必须在应用的Info.plist文件中指定此域.