Ext Js,Ext.Ajax.request 在移动设备上不起作用

Posted

技术标签:

【中文标题】Ext Js,Ext.Ajax.request 在移动设备上不起作用【英文标题】:Ext Js, Ext.Ajax.request not working on mobile device 【发布时间】:2015-11-16 11:05:10 【问题描述】:

我正在尝试使用 sencha touch 2 和 phonegap 构建应用,我正在使用在线 phonegap 构建服务,http://build.phonegap.com

我有一个问题,该应用程序在我的计算机上和所有浏览器上都运行良好,当我从 chrome 浏览器打开它时它在手机上也运行良好,我还尝试了运行服务器将应用程序传输到您的移动设备,该应用程序也可以在移动设备上运行。

但不是在我构建 apk 并将其安装在我的手机上时。除了 Ajax 请求外,一切正常,这是我的 ajax 请求的 sn-p。

Ext.Ajax.request(
    url: 'http://192.168.0.200/DVD/store.php',
    timeout:80000,
    callback: function(options, success, response) 
        var home = Ext.getCmp('home');
        home.sethtml(response.responseText);
    
);

我被摧毁了,因为'我可以发誓它以前可以工作,所以我创建了一个新的开箱即用的应用程序并创建了一个按钮,并向其中添加了上述功能,但这没有用。

我正在做的是,使用 sencha sencha app build android 构建应用程序 然后我压缩 android 目录内容,将其上传到 phonegap 构建服务,然后将其安装到我的手机上,除了 ajax 请求之外一切正常。

我的电脑上没有android SDK,所以我必须使用phonegap online build

我在这里错过了什么?

谢谢

【问题讨论】:

还有其他要求吗?闻起来像跨域问题,但没有任何错误消息,你不会走得太远。你应该try to get the error message from the request。 不应该是跨域错误,我收到了该错误,我在 PHP 文件中添加了适当的标头以允许所有来源,在我的计算机上我连接到 127.0.0.1 并且我我从 192.168.0.200 请求,这是我自己的 IP,但我仍然这样做是为了模拟可能发生的任何错误,因为我修复了它们,它工作得很好,除了在我构建它之后它没有。跨度> 【参考方案1】:

如果您使用的是 Cordova 5.x,您需要检查您的内容安全策略是否正确设置在 index.html 的头部。您将需要一个 connect-src 子句,允许连接到 http://192.168.0.200

所以,请使用以下内容:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://192.168.0.200">

这应该允许 Android 设备访问您的服务器,假设 Android 设备位于 192.168.0.200 解析到您的服务器的网络上。

如果您将来将应用程序移植到 ios,您还需要配置 Apple 的 App Transport Security 以允许通配符访问所有非 SSL 服务器,或配置例外以允许 iOS 9 设备与 192.168.0.200 建立 http 连接.可以在 here 找到一篇博文,告诉您整个过程。

【讨论】:

我已经尝试过这个解决方案,在抛出一些错误后,我添加了几个星号,仍然无法在移动设备上运行,它是使用 phonegap 4 构建的,我假设它使用的是 cordova 4,所以上述问题不是问题,我注意到当我从应用程序内发出请求时,我收到“网络连接错误”本机通知,那么 android 中是否有事件日志或其他内容,以便我可以阅读有关错误的更多信息?这里要注意的是移动设备可以访问服务器,我可以通过移动设备上的chrome浏览器访问该文件 还有几件事要检查 - 您的 config.xml 文件中是否有 &lt;access origin="*" /&gt;,以及您的 platforms/android/AndroidManifest.xml 中是否有 &lt;uses-permission android:name="android.permission.INTERNET" /&gt; 我不是在本地构建它,所以你所说的所有文件都被添加到服务器上的包中,但我会尝试在本地构建它并更改你推荐的设置并查看这是怎么回事,但奇怪的是,曾经有一段时间它起作用了。不过我会试试你的建议,非常感谢 刚刚意识到我没有解决“android 中是否有事件日志或其他内容,以便我可以阅读有关错误的更多信息”——通过 USB 将 Android 设备连接到您的机器,您可以运行它在终端获取日志记录:adb logcat|grep Cordova - 在没有 grep 的情况下运行会变得非常嘈杂,因为您也会收到所有操作系统日志消息,但您可能需要这些消息来诊断问题。我在 MacOS 上使用它,不确定它是否适用于 Windows。

以上是关于Ext Js,Ext.Ajax.request 在移动设备上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Ext.ajax.request 不能在 jsonData 中使用 0

Ext.Ajax.Request 在浏览器中不起作用

在 Chrome 中超时 Ext.Ajax.request 后未捕获的异常

Ext.Ajax.request 是不是有任何 response.status 代码列表?

逆向工程使用 Ext.Ajax.request 的跨域 POST 请求

ExtJS 4.2.1 模拟 Ext.Ajax.request