Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ajax连接到本地服务器时Cordova应用程序超时_Android_Jquery_Ajax_Jsonp_Cordova - Fatal编程技术网

Android 使用ajax连接到本地服务器时Cordova应用程序超时

Android 使用ajax连接到本地服务器时Cordova应用程序超时,android,jquery,ajax,jsonp,cordova,Android,Jquery,Ajax,Jsonp,Cordova,我到处寻找,试图解决这个问题,但没有结果。我正在尝试将Phonegap应用程序连接到我机器上本地托管的服务器,但它总是超时。我曾经帮助我创建一个简单的应用程序,最终完全复制了Sam Croft的代码。它仍然超时。如果我连接到samcroft上的PHP脚本,应用程序就会工作,我可以将数据检索到我的应用程序中,但是如果我用我的URL替换他的URL,它就会超时。我的PHP脚本在我的浏览器中运行得很好,但在我的Android虚拟设备中运行不好。我是否添加http://127.0.0.1*是否加入我的白名

我到处寻找,试图解决这个问题,但没有结果。我正在尝试将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。和jquery1.9.1。我尝试了这些文件的旧版本,结果相同

下面的js代码中的URL工作得很好,但是当我用
替换URL时http://127.0.0.1/landmarks.php“
我得到了超时错误。我尝试将端口号添加到URL中,但得到相同的错误。我也尝试过使用
http://localhost/landmarks.php“
,但出现了相同的错误。(除了我的连接到本地MySQL服务器外,这两个landmark.php文件是相同的)

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);
    }
$.ajax({
网址:'http://samcroft.co.uk/demos/updated-load-data-into-phonegap/landmarks.php',
数据类型:“jsonp”,
jsonp:'jsoncallback',
超时:5000,
成功:功能(数据、状态){
$。每个(数据、功能(i、项){
var landmark=''+项目名称+''
+“”+项目.纬度+”
“ +项目.经度+'

'; 输出。追加(landmark); }); }, 错误:函数(xhr、ajaxOptions、thrownError){ 警报(ajaxOptions); }
您不能仅从Android设备访问localhost

确保以下物品已就位

  • 您的机器和手机(通过wifi)连接到同一局域网
  • 获取计算机的IP并使用它,而不是
    localhost
  • 如果您仍然无法访问localhost,请禁用防火墙或计算机上运行的任何防病毒程序,然后重试
这就是我通过手机访问本地主机的方式


phone和emulator都可以访问外部域中的外部url。但要访问本地主机,您需要位于同一LAN或任何其他变体(VPN等)中.

听起来像是在用仿真器进行测试。如果是这样,
localhost
127.0.0.1
将不起作用,因为该地址指的是本地计算机,在本例中指的是实际的仿真器本身。相反,您应该使用
10.0.2.2
,它的作用类似于一个“桥”您可以阅读更多信息:这将解释外部samecroft站点工作的原因。

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

太棒了,我很高兴它能起作用。我花了几天时间才发现,这是一件很容易错过的事情。请随意接受这个答案;)