Iphone CORS在PhoneGap+;jQuery Mobile不在设备上运行,但在浏览器上运行

Iphone CORS在PhoneGap+;jQuery Mobile不在设备上运行,但在浏览器上运行,iphone,jquery,cordova,jquery-mobile,cors,Iphone,Jquery,Cordova,Jquery Mobile,Cors,因此,我正在使用Phone Gap和jQuery mobile构建一个应用程序 当使用ajax从白名单服务器获取json响应时,我得到了一个错误响应。然而,控制台中没有显示任何内容。奇怪的是,当在web浏览器中测试应用程序时,它工作正常,只有当我启动iphone设备时,它才会发出一声响声 现在值得一提的是,我托管php脚本的网站在Phone Gap中被列为白名单。我在数组中使用了*(以防万一这会有所不同)。 我已经为此制定了一个jsonp解决方案,但我不想使用它——我觉得如果它在浏览器中工作,那

因此,我正在使用Phone Gap和jQuery mobile构建一个应用程序

当使用ajax从白名单服务器获取json响应时,我得到了一个错误响应。然而,控制台中没有显示任何内容。奇怪的是,当在web浏览器中测试应用程序时,它工作正常,只有当我启动iphone设备时,它才会发出一声响声

现在值得一提的是,我托管php脚本的网站在Phone Gap中被列为白名单。我在数组中使用了*(以防万一这会有所不同)。 我已经为此制定了一个jsonp解决方案,但我不想使用它——我觉得如果它在浏览器中工作,那么它在设备上一定是可能的。我希望这是一个简单的解决办法

这是我的简单php脚本,只是回显了一个json字符串

<?php
header('Access-Control-Allow-Origin: *');
$arr = array('a' => 1, 'b' => 2);
echo json_encode($arr);
?>
编辑:我在页面上也有这个js…在jquery移动文档中建议在使用Phone Gap时使用这个

        <script>
        $( document ).on( "mobileinit", function() {

            $.mobile.allowCrossDomainPages = true;
            $.support.cors = true;
        });

        </script>

$(文档).on(“mobileinit”,函数(){
$.mobile.allowCrossDomainPages=true;
$.support.cors=true;
});
而形式-我认为这不是必要的

           <form id='registerUser' action="" method="POST">
                <div data-role="fieldcontain">
                    <label for="name">Name:</label>
                    <input type="text" name="name" id="name" value=""  />
                    <label for="name">Email:</label>
                    <input type="text" name="email" id="email" value=""  />
                    <label for="name">Password:</label>
                    <input type="password" name="password1" id="password1" value=""  />
                    <label for="name">Re-enter password:</label>
                    <input type="password" name="password2" id="password2" value=""  />
                    <br>
                    <button type="submit" aria-disabled="false">Submit</button>
                </div>
            </form>

姓名:
电邮:
密码:
重新输入密码:

提交

提前谢谢你的帮助

最简单的尝试是使用以下内容扩充PHP服务器:

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET,PUT,POST,DELETE');
header('Access-Control-Allow-Headers: Content-Type');
$arr = array('a' => 1, 'b' => 2);
echo json_encode($arr);
?>

您还需要确保PHP服务器允许选项HTTP请求


较长的答案是,JS代码中的
数据类型:“json”
正在触发CORS飞行前请求。飞行前请求基本上是向服务器请求进行实际请求的权限。您可以在此处了解有关CORS飞行前的更多信息:

我遇到过
访问控制允许源代码:
实际上被客户端忽略的情况。我认为通过CORS允许所有域的“正确”方法(请参阅)是从请求头中实际获取源域,然后将该源动态应用于响应的
Access Control allow origin
头,而不是使用通配符,确保客户端尊重标题。

好的,因此代码没有问题。应用程序似乎正在缓存错误结果或其他内容。我关闭了应用程序并重新启动,现在一切正常。从周围的阅读来看,iOS6 safari似乎缓存了与以前版本不同的帖子

我在ajax调用中添加了这一点,以防止缓存帖子

 headers: { "cache-control": "no-cache" }
我希望这能帮助其他人,因为这是一种痛苦


感谢您的回复

我处理此问题的经验证明是因为我使用了带有“无效”SSL证书的httpS。iPhone mobile safari和webview不信任SSL证书,因此没有发出AJAX请求

我可以通过临时使用纯HTTP来完成开发

我的CORS标题是:

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With,Authorization

您能将收到的错误消息包括在ajax函数中吗。不是一个特定的js错误。我尝试添加这些额外的标题,但没有效果。在ajax请求中仍然遇到错误语句。我该如何做呢?我也遇到了同样的问题,您可以在这里查看一下:
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With,Authorization