我通过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应用程序。
答案 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;