2011-06-29 9 views
2

からツリーをリロード(それが正常に動作します)私は、Ajaxを使用して、私のjsTreeでXMLフラットツリーをロードしていますので、宣言は次のようになります。変更AJAXのオプションとサーバー

$("#jstree").jstree({ 
     "xml_data": { 
      // "data": $xmlFlatData, 
      "ajax": { 
       type: "POST", 
       async: true, 
       "url": loc + "/AjaxReturnTree", 
       data: '{"longnames":"'+flag+'"}', 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       cache: false, 
       success: function (msg) { 
         var mm = eval('(' + msg + ')'); ; // create object to get rid of json 
         return mm.d; 
       }, 
       error: function() { 
        // TODO process error 
       } 
      }, 
      "xsl": "flat", 
      "override_ui": "true", 
      "real_checkboxes": "true" 
     }, 
     "plugins": ["xml_data", "themes", "checkbox", "ui"] 
    }); 

今、私はリロードする必要がありますツリーと "longnames"の部分を別のフラグ(0/1)に変更しますが、他のオプションは変更しないでください。

私はこのような何かを使用しようとしています:

  $("#jstree").jstree({ 
       "xml_data": { 
        "ajax": { 
        cache: false, 
         data: '{"longnames":"' + flag + '"}' 
        } 
       } 
      }); 
      $("#jstree").jstree("refresh"); 

をしかし、それは新しいAJAX要求をトリガしない、唯一のリロードせずに画面上のツリーを更新します。

ツリーをサーバーからリロードする方法を教えてください。

また、完全に新しいツリーオブジェクトを作成するのではなく、古いAjax設定のプロパティを変更することができますか? それとも、jQueryの(のgetDataを実行)し、最初の実行から結果だけを保持します:

答えて

2
 
    flag = 0; 

    function getData() { 
     return '{"longnames":"' + flag + '"}'; 
    } 

    $("#jstree").jstree({ 
     "xml_data": { 
      "ajax": { 
       cache: false, 
       data: getData() 
      } 
     } 
    }); 

    $("#jstree").jstree("refresh"); //refresh with flag = 0 

    flag = 1; 
    $("#jstree").jstree("refresh"); //refresh with flag = 1 
0

は「のgetDataデータ」の括弧を削除する必要があります。 かっこなしでは、jQueryは「データ」の値を関数として交換し、毎回実行します。 ところで、 "cache:false"に注意してください.jQueryは "_" cacheBursterをポストします。

関連する問題