2013-08-19 48 views
1

所以我需要將JavaScript變量傳遞給grails參數來構建和下載文件。所以最初做了這個與ajax只是爲了瞭解ajax不會下載。最初,它的工作原理是這樣的:將javascript變量傳遞給grails params

<script type="text/javascript" charset="utf-8"> 
    function myFunction() { 

     jQuery.ajax({ 
      url: "Search/download", 
      type: "POST", 
      data: {facets: visualSearch.searchQuery.facets()} 
     }); 
    } 
</script> 
<input type="button" onclick="myFunction()" value="download"> 

雖然這正確地傳遞了映射,但這並沒有做下載。

所以現在我想做一個g:link

<g:link controller="Search" action="test" params="[facets: '\$(visualSearch.searchQuery.facets())']" >TEST GRAILS</g:link> 

類似的東西,但是我得到的在控制器的PARAMS是

facets=$(visualSearch.searchQuery.facets()) 
action=test 
controller=search 

我怎樣才能解決這個問題要通過面(無論是解析還是解析)到控制器中。謝謝!

回答

2

params中添加您的javascript變量將不起作用。 g:link在服務器端執行,不知道你的javascript值。您可以刪除此params,而是在鏈接的「onclick」事件中添加代碼,以在params中設置您的javascript值。

喜歡的東西: 在GSP頁面,

<g:link name="searchLink" controller="Search" action="test">TEST GRAILS</g:link> 

,然後在javascript(在同一頁),

$(function() { 
    $('a[name="searchLink"]').bind('click', function() { 
    $(this).attr('href', $(this).attr('href') + '?facets=' + visualSearch.searchQuery.facets()); 
    }) 
}) 

基本上你是使用Grails生成超鏈接,然後使用JQuery追加一個查詢字符串的參數到該href

希望有所幫助。

+1

代碼是什麼?只是' TEST GRAILS'? – Badmiral

+0

對不起,仍然不起作用,所有'params'都有'action = test controller = search' – Badmiral

+0

有一個錯字。應該是'facet ='看看這是否適合你。還在這裏測試了這個片段 - http://jsfiddle.net/hztYf/ – aldrin

1

我傾向於在這些情況下,做的是使用g:link生成URL,但隨後覆蓋與jQuery默認行爲,使Ajax調用:

<g:link class="searchLink" controller="Search" action="test" params="[facets: '\$(visualSearch.searchQuery.facets())']" >TEST GRAILS</g:link> 

$('.searchLink').on('click', function(e) { 
    e.preventDefault(); // prevent default link behavior 

    var $element = $(this); 
    var url = $element.prop('href'); 

    $.post(url, function(data) { 
    // callback if you need it 
    }); 
}); 
+0

對不起,有點困惑,是JavaScript意味着做控制器調用還是意味着要得到方面? – Badmiral

+0

javascript使用通過g:link標記創建的href對服務器進行ajax調用。 – Gregg

0

從你有什麼,我認爲你應該創建一個表單,並在click事件提交:

<script type="text/javascript" charset="utf-8"> 
    function myFunction() { 
     $('<form>', { 
      "html": '<input type="text" name="facets" value="' + visualSearch.searchQuery.facets() + '" />', 
      "action": '${createLink(controller: "Search", action: "test")}', 
      "method": 'POST' 
     }).appendTo(document.body).submit(); 
    } 
</script> 
<input type="button" onclick="myFunction()" value="download"> 

或者重構你的代碼有一個真正的html表單和準備數據之前提交。