0

我正在通过 ajax get 调用我的应用程序的内部路由(无跨站点脚本)

Archive/WeatherForecast?lat=63.8299&lng=20.25484 

它在我的本地主机上运行良好,但在我有 https 的实时环境中,它会抛出“http 403,禁止”错误。

如果它可能与问题有关,则该路由会发出 php 请求

$api_url = "http://api.met.no/weatherapi/locationforecastlts/1.1/";

这显然不是https,但客户端不应该担心这一点,因为然后提供给客户端的是保存到磁盘的文件中的数据(基于上面那个http路由的信息)。我检查了生成的文件,它们是具有准确内容的实际 xml 文件。

这是获取请求的完成方式:

var url = '{{ path('WeatherForecast') }}';
var lat = $('#data_21').val();
var lng = $('#data_22').val();
var full_uri = url + '?lat=' + lat + '&lng=' + lng;
console.log('calling:' + full_uri);
jQuery.ajax({
     url:    full_uri,
     success: function(result) {
                $('#weatherdata').html(result);
            },
     error: function(result) {
                $('#weatherdata').html('kunde inte hämta väderdata');
            },              
    asynch: false,
}); 

此外,如果我进入 chrome 控制台查看错误,它会显示我尝试 ajaxGet 的路径,如果我单击该路径以在新选项卡中打开它,它会突然工作并向我显示数据jQuery AjaxGet 抛出“403 禁止”...

可能没关系,但它是一个 symfony2 应用程序。

4

2 回答 2

0

好的各位,很抱歉打扰你们了。我意识到问题是什么......并且有问题的片段被排除在问题之外,所以你无法发现它。对不起。

它是这样的:在尝试这段代码时,我使用了一个 var_dump() 后跟一个 die;打印出数据。对于我的实时环境中的 jquery/ajax 引擎来说,这显然不是一个足够好的响应(尽管它在我的本地主机上运行良好)。

一旦我返回一个正确的响应对象,它就可以工作。

如果使用 jQuery ajax get 获取,这将在返回的数据上生成错误状态:

    var_dump($weatherdata);
    die;

这将正常工作(使用 symfony2 创建响应)

    $response = new Response($r);
    $response->setCharset('ISO-8859-1');        
    return $response;       
于 2013-09-10T20:53:58.987 回答
0

根据webservice 的文档,您使用了错误的 url - 尝试

http://api.met.no/weatherapi/locationforecastlts/1.1/?lat=63.8299;lon=20.25484
于 2013-09-10T20:46:22.193 回答