2

我一直在寻找高低试图解决这个问题,但无济于事。我正在尝试将 Phonegap 应用程序连接到我机器上本地托管的服务器,但它总是超时。我使用这段代码帮助我创建了一个简单的应用程序,并最终完全复制了 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,它可以完美运行,但是当我将 URL 替换'http://127.0.0.1/landmarks.php'为超时错误时。我尝试将端口号添加到 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);
    }
4

3 回答 3

2

听起来您正在使用模拟器进行测试。如果是这种情况,localhost并且127.0.0.1由于该地址指的是本地机器(在这种情况下是实际的模拟器本身),它将不起作用。相反,您应该使用10.0.2.2,它充当托管脚本的开发机器/服务器的“桥梁”。您可以在此处阅读更多相关信息:这将解释外部 samecroft 站点为何有效。

于 2013-05-20T15:52:27.103 回答
0

您不能只从 Android 设备访问 localhost。

确保以下事项到位

  • 您的机器和手机(通过 wifi)连接到同一个 LAN
  • 获取您机器的 IP 并使用它来代替 localhost
  • 如果您仍然无法访问 localhost,请禁用防火墙或计算机上运行的任何防病毒程序,然后重试

这就是我通过手机访问本地主机的方式。

手机和模拟器都可以访问外部 url,就像它们在外部域中一样。但是要访问本地主机,您需要在同一个 LAN 或任何其他变体(VPN 等)中。

于 2013-05-20T10:28:03.553 回答
0

开发应用程序时不应该使用 localhost,而是使用服务器的本地 IP。本地主机是调用服务器的机器。当你在真实设备上尝试时,localhost 是设备,并且该设备没有安装服务器,所以它会失败。顺便说一句,要在真实设备上进行测试,它必须连接到同一个网络。

于 2013-05-20T19:39:00.573 回答