ajax可以在localhost上运行,而不是在实时https站点上运行

时间:2013-09-10 20:28:56

标签: jquery ajax symfony https get

我通过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文件。

这是get请求的完成方式:

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应用程序。

2 个答案:

答案 0 :(得分:0)

根据the docs for the webservice,您使用了错误的网址 - 尝试

http://api.met.no/weatherapi/locationforecastlts/1.1/?lat=63.8299;lon=20.25484

答案 1 :(得分:0)

好的伙计们,抱歉打扰了你。我意识到问题是什么......问题的片段被排除在问题之外,所以你无法发现问题。遗憾。

这是:在尝试这段代码时,我使用了一个var_dump(),然后是一个die;打印出数据。对于我的实时环境中的jquery / ajax引擎来说,这显然不是一个足够好的响应(虽然它在我的localhost上工作正常)。

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

如果使用jQuery ajax get:

获取,这将在返回的数据上生成错误状态
    var_dump($weatherdata);
    die;

这样可以正常工作(使用symfony2创建响应)

    $response = new Response($r);
    $response->setCharset('ISO-8859-1');        
    return $response;