使用 ajax 连接到本地服务器时 Cordova 应用程序超时
Posted
技术标签:
【中文标题】使用 ajax 连接到本地服务器时 Cordova 应用程序超时【英文标题】:Cordova app timeout when connecting to local server using ajax 【发布时间】:2013-05-14 20:38:44 【问题描述】:为了解决这个问题,我四处寻找,但无济于事。我正在尝试将 Phonegap 应用程序连接到我机器上本地托管的服务器,但它总是超时。我使用this code 帮助我创建了一个简单的应用程序,最终完全复制了 Sam Croft 的代码。它仍然超时。如果我连接到 samcroft 上的 php 脚本,该应用程序可以运行,我可以将数据检索到我的应用程序中,但如果我用我的 URL 替换他的 URL,它就会超时。我的 PHP 脚本在我的浏览器中完美运行,但在我的 android 虚拟设备中却没有。是否将http://127.0.0.1*
添加到我的白名单中没有区别。奇怪的是(?)即使我没有将http://samcroft.co.uk*
添加到我的白名单中,当我在 samcroft.co.uk 上运行脚本时,应用程序也会正常运行并检索数据。我在 Eclipse 中开发并使用 Cordova 2.6.0。和jQuery 1.9.1。我已经尝试过这些文件的旧版本,结果相同。
使用下面 js 代码中的 URL,它可以完美运行,但是当我用 'http://127.0.0.1/landmarks.php'
替换 URL 时,我得到了超时错误。我尝试将端口号添加到 URL 中,但得到相同的错误。我也尝试过使用 'http://localhost/landmarks.php'
并出现同样的错误。 (这 2 个 landmark.php 文件是相同的,除了我的连接到本地 mysql 服务器)。
js代码:
$.ajax(
url: 'http://samcroft.co.uk/demos/updated-load-data-into-phonegap/landmarks.php',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(data, status)
$.each(data, function(i,item)
var landmark = '<h1>'+item.name+'</h1>'
+ '<p>'+item.latitude+'<br>'
+ item.longitude+'</p>';
output.append(landmark);
);
,
error: function(xhr, ajaxOptions, thrownError)
alert(ajaxOptions);
【问题讨论】:
【参考方案1】:听起来您正在使用模拟器进行测试。如果是这种情况,localhost
和127.0.0.1
将不起作用,因为该地址指的是本地机器,在这种情况下,是实际的模拟器本身。相反,您应该使用10.0.2.2
,它就像您的托管脚本的开发机器/服务器的“桥梁”。你可以阅读更多关于它的信息here:这可以解释为什么外部的 samecroft 网站可以工作。
【讨论】:
太棒了,我很高兴它成功了。我花了几天时间才发现自己,这是很容易错过的事情之一。随意接受这个答案;)【参考方案2】:您不能只从 Android 设备访问 localhost。
确保以下事项到位
您的机器和手机(通过 wifi)连接到同一个局域网 获取您机器的 IP 并使用它来代替localhost
如果您仍然无法访问 localhost,请禁用防火墙或计算机上运行的任何防病毒程序,然后重试
这就是我通过手机访问本地主机的方式。
手机和模拟器都可以访问外部 url,因为它们在外部域中。但是要访问本地主机,您需要在同一个 LAN 或任何其他变体(*** 等)中。
【讨论】:
【参考方案3】:在开发应用程序时,您不应该使用 localhost,而应使用服务器的本地 IP。本地主机是调用服务器的机器。 当你在真实设备上尝试时,localhost 是设备,并且该设备没有安装服务器,所以它会失败。 顺便说一句,要在真机上测试,它必须连接到同一个网络。
【讨论】:
以上是关于使用 ajax 连接到本地服务器时 Cordova 应用程序超时的主要内容,如果未能解决你的问题,请参考以下文章
Cordova android 应用程序 - 发布版本 - 无法连接到服务器
Visual Studio 2015 Apache Cordova 应用程序:如何直接部署到连接到 PC(不是 Mac)的 iOS 本地设备?
使用 Phonegap 构建时,cordova-plugin-whitelist 不起作用
如何在连接到 API(在 Yii 中)的移动应用程序(cordova)上启用跨域资源共享
如何使用JDBC将Cordova应用程序连接到MySQL数据库?
使用串行插件时出现 Ionic Capacitor Android 错误 - 连接到外部设备时出现 Cordova_not_available