2

そのため、ファイルをビルドしてダウンロードするには、javascript 変数を grails パラメーターに渡す必要があります。したがって、最初はajaxがダウンロードを行わないことを知るために、ajaxでこれを行いました。当初、これは次のように機能しました。

<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>

しかし、コントローラーのパラメーターで取得するのは

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

これを修正して、ファセット (解析されているか解析されていないかに関係なく) をコントローラーに渡すにはどうすればよいですか。ありがとう!

4

3 に答える 3

3

JavaScript 変数を追加しても機能しparamsません。はg:linkサーバー側で実行され、JavaScript の値を認識しません。これを削除してparams、代わりにリンクの「onclick」イベントにコードを追加して、パラメータに 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 にパラメーターを含むクエリ文字列を追加します。

それが役立つことを願っています。

于 2013-08-19T17:27:56.457 に答える
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
  });
});
于 2013-08-19T18:37:34.613 に答える
0

あなたが持っているものから、フォームを作成してクリックイベントで送信する必要があると思います:

<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 フォームを作成し、送信前にデータを準備します。

于 2013-08-20T07:05:13.337 に答える