无法打开流:HTTP请求失败!

时间:2009-11-11 11:59:23

标签: php web-services

我正在请求网络服务使用此代码使用php文件中的国家/地区名称来拉取lat / lng坐标:

$defaultcountry = $_REQUEST['country'];
$daurl = "http://ws.geonames.org/search?q=".$defaultcountry.'&rows=5';
$contents = file_get_contents($daurl);

$xml = new SimpleXMLElement($contents);
$lat = $xml->geoname->lat;
$lng = $xml->geoname->lng;

$coords = array('lat'=>"$lat", 'lng'=>"$lng");

$o = array('success'=>true, 'coords'=>$coords);  


echo json_encode($o);

我没有直接从浏览器调用此文件的问题。问题是当ajax在某处调用此文件时,如下所示:

ajaxManager.add('cacheQueue',{
                                    url: '../lib/getdefaultcoord.php',
                                    type:'POST',
                                    dataType:'json',
                                    data:{country:Country},
                                    success:function(json){
                                        alert(json.coords.lng);

                                    }

                                    })

因此,错误出现在我的主题行中。我有一个类似的场景,使用不同的webservice url(webservicex.net)请求countrynames。当通过ajax发出请求时,来自geonames.com的那个似乎不起作用......怎么来的?

4 个答案:

答案 0 :(得分:0)

从您执行AJAX请求的页面中,此URL是否正确?

url:'.. / lib / getdefaultcoord.php'

答案 1 :(得分:0)

你应该得到firebug并从中检查XHR。

我认为或您的网址错误或某些参数未按预期传递

答案 2 :(得分:0)

如果你不介意的话,我会提供你们可以玩的东西: 使用ajax请求文件:

$(document).ready(function(){ 


        $.post('getdefaultcoord.php', {country:"united arab emirates"}, function(data){
            alert(data.coords.lat);

        },'json');


    });

在getdefaultcoord.php上:


$defaultcountry = $_REQUEST['country'];
$url = "http://ws.geonames.org/search?q=".$defaultcountry."&rows=5";
$contents = file_get_contents($url);

$xml = new SimpleXMLElement($contents);
$lat = $xml->geoname->lat;
$lng = $xml->geoname->lng;


$coords = array("lat"=>$lat,"lng"=>$lng);
$o = array('success'=>true, 'coords'=>$coords);

echo json_encode($o);

你可以在getdefaultcoord.php周围玩,以确保请求文件与其国家/地区请求一起正常工作,因此getdefaultcoord.php也是如此,请注意我在主题行上发布的原始错误与使用firebug相同...

答案 3 :(得分:0)

我认为在你的ajax调用中,你应该尝试拼出url的整个路径。而不是使用亲戚 - “../lib/getdefaultcoord.php”尝试使用“http://www.yourdomain.com/lib/getdefaultcoord.php”。 ajax调用可能会被相对引用混淆。