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 ファイルです。

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 アプリです。

4

2 に答える 2

0

OK 皆さん、お手数をおかけして申し訳ありません。私は問題が何であるかを理解しました...そして問題のあるスニペットは質問から除外されているので、あなたはそれを見つける方法がありませんでした. ごめん。

ここにあります: このコードを試すとき、私は var_dump() の後にダイを使用しました。データを印刷します。これは明らかに、私のライブ環境の 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 に答える