2013-09-10 80 views
0

我打電話我的應用程序的內部路由通過Ajax的GET(無跨站腳本)AJAX GET工作在本地主機上,而不是在現場HTTPS站點

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, 
}); 

而且,如果我去到鉻控制檯來查看錯誤,它顯示了我,我想ajaxGet什麼路線,如果我點擊這個路由在一個新的標籤打開它,它突然工作,並呈現給我的數據,jQuery的AjaxGet投擲「403禁止」...

它可能並不重要,但它是一個symfony2應用程序。

+0

是吧' asynch:false,'或'async:false,' – PSL

+0

並且在末尾沒有逗號 – hendr1x

+0

我不認爲你可以在https頁面上執行http ajax請求。 (爲了瀏覽器安全的原因) –

回答

0

OK的傢伙,對不起,打擾你了。我意識到問題出在哪裏......並且問題的片段被排除在問題之外,因此您無法發現問題。抱歉。

這裏是:當試用這段代碼時,我使用了一個var_dump()後跟一個die;打印出數據。這顯然不是我的現場環境中的jquery/ajax引擎的足夠好的響應(儘管它在我的本地主機上工作正常)。

一旦我返回一個適當的響應對象,它的工作原理。

,這將產生對返回的數據,如果獲取了jQuery的AJAX得到一個錯誤狀態:

var_dump($weatherdata); 
    die; 

這將正常工作(使用的Symfony2創建響應)

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

根據the docs for the webservice,您使用的是錯誤的URL - 嘗試

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

哦,這不是我在file_get_contents()中使用的格式,而是在我的內部路由中我使用&值之間的標準查詢字符串。 –

+0

@MattiasSvensson:經度參數的名稱也不同(從API文檔中'lng'而不是'lon')。但它似乎並不重要... – collapsar

+0

是的,但這只是我如何將數據傳遞給我的PHP函數,這反過來需要這些值,並使file_get_contents()爲api的正確url。 –

相關問題