2013-07-12 38 views
1

我正在使用Laravel 4 PHP MVC框架和Knockout.js來創建一個簡單的應用程序。

我已經設置了一個RESTful API,並且想要從客戶端執行$.getJSON請求,但獲取請求會發送到綁定的URL。

而不是做GEThttp://mydomain.com/users/123Fdfsd02/reports淘汰賽將請求發送到http://mydomain.com/users/reports這是錯誤的URL。

這是我的淘汰賽代碼:

function ReportViewModel() { 
    var self = this; 

    self.report = ko.observable(); 

    self.getAllReports = function(data) { 
     $.getJSON("reports", function(data) { 
      self.report(data); 
     }); 
    } 

    self.getAllReports(); 
}; 

ko.applyBindings(new ReportViewModel()); 

缺少什麼我在這裏?我試過將網址設置爲./reportsreports,但仍然沒有運氣。

感謝您幫助newb!

回答

0

我這扔在頭鑑於我的Laravel項目部分,其他腳本之前可能需要它:

<script> 
    var BASE_URL = "{{ URL::to('/') }}"; 
</script> 

然後我就可以組裝AJAX調用像...

$.getJSON(BASE_URL+"api/content", params, function(response) { 
    //whatever 
}); 

而且無論應用程序是從本地主機的子文件夾運行,還是在分段或生產環境中運行,它都可以運行。

0

也許只使用相對路徑絕對路徑會更聰明。

你能用變量構造路徑/users/123Fdfsd02/reports嗎?或者這是不可能的?

瀏覽器的地址欄中顯示哪個URL?也許http://mydomain.com/users

+0

在我的瀏覽器中的網址是mydomain.com/users/123Fdfsd02所以我想知道爲什麼請求的網址從「123Fdfsd02」中刪除。 API的設置方式並非如此,以便我可以動態創建URL,因爲我認爲這不是必需的。 – Ismailp

+0

也許只是使用'window.location。href +'/ reports'' – Milaan

+0

對不起,它的'window.location.pathname +'/ reports''。 – Milaan

0

這應該工作:

var rootUrl = "https://stackoverflow.com/users/"+ userToken +"/reports" 

哪裏userToken可以找到這樣:

s = document.location.href; 
s = s.replace('http://mydomain.com/users/', ''); 

userToken= s.substring(0, s.indexOf('/')); 

我希望它能幫助。

+0

那麼userToken是如何定義的呢? – Ismailp

+0

我更新我的帖子 – Damien

0

個人意見,我會這樣做:

設置HTML,帶'base'標記。 「基地」標籤將確保每一個相對URL將其「HREF」屬性的值預先考慮,因此AJAX調用相對URL user/detail/1會去這絕對URL - >http://mydomain.com/user/detail/1

<!doctype html> 
<html lang="en"> 
<head> 
    ... 
    <base href="http://mydomain.com/"> 
    ... 

然後,使用相對URL在AJAX調用中,基於'base'標記中定義的根URL

function ReportViewModel() { 
    ... 

     $.getJSON("users/123Fdfsd02/reports", 
    ... 
}; 

Bulletproof解決方案是使用絕對URL。