0

所以我想AJAX從我的結果列表中的單個solr文檔到「文檔視圖」視圖。我試圖使用AngularJS來AJAX到我的視圖渲染方法和顯示文檔的方式,但我似乎無法得到的角度工作,我不知道我在Play端正確做事情。你至少願意告訴我,我想要做的事情是否會起作用? Angular錯誤來自docText.text();呼叫。這裏是我的代碼:

角控制器代碼:

var docText = $resource("http://localhost:9000/views/full-doc-text.html", { 
     text: {method: 'PUT'} 
    }); 

    $scope.handleViewText = function(value) { 
     docText.text({doc: value}); 
    } 

Java代碼:

public static Result viewText() { 
     JsonNode json = request().body().asJson(); 

     //do stuff here 

     return ok(viewtext.render(json)); 
    } 

路線:

GET  /views/full-doc-text.html   controllers.Application.viewText() 

回答

1

我看到三個問題與上面的代碼;

1.資源定義docText不正確。如果您閱讀了angularjs手冊here,您會看到$resource有4個參數。第一個是資源URL,第二個是參數默認值,第三個是自定義操作,第一個是資源選項,其中最後三個是可選的。在您的代碼中,您將自定義操作作爲第二個參數傳遞,這應該是第三個參數。由於您的資源中沒有任何參數,因此第二個參數必須爲空。所以第一修正:

var docText = $resource("http://localhost:9000/views/full-doc-text.html", null, { 
    text: {method: 'PUT'} 
}); 

2.You定義text行動的HTTP方法PUT然而,在你的路由文件,你正在處理您所需的行動GET請求。你應該改變你的路由定義爲:實施問題的REST服務時

PUT  /views/full-doc-text.html   controllers.Application.viewText() 

3. PUT方法通常用於更新操作。在你的情況下,你似乎沒有更新任何東西。所以我建議只使用POST方法來約定。

+0

謝謝!對於一些懶惰的代碼感到遺憾(主要是我的路由文件中修復的路由,我只是沒有在這裏進行修正,PUT也在那裏,因爲我只是在POST失敗後嘗試了一些東西)。 – marcus

+0

儘管如此,路徑/views/full-doc-text.html應該是一個GET調用,因爲它將向客戶端提供full-doc-text.html頁面,所以我應該有一個「 catch「POST方法來捕獲post調用,處理JSON上的任何內容,然後調用GET方法來提供完整的doc-text頁面? – marcus

+0

對不起,但我無法弄清楚你的用例。我可以從你的代碼中找出上面的內容。你正在提交一些json數據到後端,操作它,然後渲染它。在這種情況下,/views/full-doc-text.html路由需要與正文(PUT或POST)的HTTP方法相對應。由於您使用$ scope.handleViewText提交數據,因此GET方法不明智。如果你能澄清你的用例,我可能會提出一些解決方案。祝你好運;) – ysf