Ajax 查询在电话间隙 iOS 应用程序中失败,状态为 0

Posted

技术标签:

【中文标题】Ajax 查询在电话间隙 iOS 应用程序中失败,状态为 0【英文标题】:Ajax query failed with status 0 in phone gap iOS app 【发布时间】:2013-07-12 07:49:52 【问题描述】:

我正在开发一个带有 phonegap 的 ios 应用程序,其中我使用foursquare api列出所有附近的场地。这是我用于列出场地的代码。

$.getJSON('https://api.foursquare.com/v2/venues/search?ll='+pos+'&radius=10000&client_id=2POUFAUU4ZBJ2MTDOY3S2YHR2NIT52FYW0LUTPHBMNTJFJNQ&client_secret=YFDZI1YWV3ZI5S5SPM2DZJEQIEBPIDJ5XFZBWTIKIQZVQNYM&v=20120101&limit=60',
          function(data) 

          console.log(pos);
          $.each(data.response.venues, function(i,venues)

                 content = '<li id="list-item"> <p><a href="#reviewPage" onClick=" return reviewPageAction(this)">' + venues.name + '</li>';

                 $(content).appendTo("#mer");

                 );
          );

如您所知,我已经为每个列表项提供了一个链接,它将加载一个评论页面,该页面将显示场地的详细信息。我为每个列表项提供了一个 onClick 函数,该函数将使用 ajax 调用我的 php 文件从我的数据库中获取一些详细信息。

以下是onclick函数的代码

$.ajax(
               type: 'GET',

               url: 'http://127.0.0.1/myPHPFile.php',
               data:  id: venueId,
               success: function(response) 


                   alert(response);
               ,
               error:function(xhr,status,error)

                alert("failure "+xhr.status);
                $("#result").html('there is error while submit');
                
               );

出于测试目的,在 myPHPFile.php 中只是回显一个字符串。

问题是我总是收到状态为 0 的错误。但它在模拟器中没有显示任何错误。在设备和桌面浏览器中显示错误!!请帮帮我。

【问题讨论】:

【参考方案1】:

您是否在 config.xml 中配置了访问权限?喜欢:

<access origin="https://api.foursquare.com" />

或所有域:

<access origin="*" />

更多信息请访问:http://docs.phonegap.com/en/2.4.0/guide_project-settings_index.md.html

【讨论】:

但是foursquare的东西工作正常。唯一的问题是对我自己的php文件的ajax请求不能正常工作。我收到状态 0 错误 如果你的PHP在myserver/myphp.php这样的域下,并且你的应用在PhonegapApp或浏览器下的file://上运行,是一个无效的跨域访问。您应该在 config.xml 下配置可访问域或在 config.xml 中添加 我已经检查了 config.xml 并且 已经存在于该文件中。 你能告诉我如何手动配置它以提供对我的 php 文件的访问权限 看这个:simonmacdonald.blogspot.com.es/2011/12/…【参考方案2】:

http://127.0.0.1/ 是同一台机器,所以如果你在模拟器上试一试,它可以工作,因为你在那台机器上有 PHP 脚本。 如果你在设备上试一下,http://127.0.0.1/是设备,设备没有PHP脚本。

您必须使用服务器的本地 IP,类似这样,但将 192.168.1.20 更改为服务器的真实本地 IP(您可以在 windows 上使用 ipconfig 或在 mac/linux 上使用 ifconfig 知道它)

$.ajax(
               type: 'GET',

               url: 'http://192.168.1.20/myPHPFile.php',
               data:  id: venueId,
               success: function(response) 


                   alert(response);
               ,
               error:function(xhr,status,error)

                alert("failure "+xhr.status);
                $("#result").html('there is error while submit');
                
               );

【讨论】:

【参考方案3】:

使用JSONP,用PHP返回数据:

echo $_GET['callback']. '('. json_encode($returnData). ');';

jQuery:

$.getJSON('yourApiUrl',
 function(data) 
  console.log(data);
 );

【讨论】:

以上是关于Ajax 查询在电话间隙 iOS 应用程序中失败,状态为 0的主要内容,如果未能解决你的问题,请参考以下文章

无法解决电话间隙 [错误] cmd:命令失败,退出代码为 ENOENT 3

使用 npm 安装电话间隙的 shasum 检查失败

如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)

电话间隙协助

iOS,电话间隙推送插件('通知')未触发

电话间隙;开发者应用程序是不是支持 3rd 方插件?