AJAX 呼び出しから受け取った JSON データに基づいて設定される JsTree があります。これがAJAX呼び出しです。
function sendQuery(){
$.ajax({
context: this,
url: 'http://localhost:8080/testMain',
type: 'GET',
dataType: 'text',
success: function(data) {
// ^^^^ Need for sendQuery() to return DATA
},
error: function (xhr, ajaxOptions, thrownError){
alert('Error xhr : ' + xhr.status);
alert('Error thrown error: ' + thrownError);
}
});
}
ここに範囲の問題があることを認識しています。JavaScript では、変数は宣言関数に従って定義されます。JSONを解析する別の関数へのパラメーターとして使用している sendQuery() から戻る方法がわかりません。これは、別のパラメーターがツリーのステージングを行うためのパラメーターです。時計仕掛けのこの部分が、私がJavaで慣れ親しんでいるほど単純に機能しないことにちょっと不満を感じています。助けてくれてありがとう。それがうまくいくなら、間違いなく受け入れる. 乾杯
編集#1:答えに基づいて、この方法でコードを変更すると、.ajax関数からデータを取得できるようになると思います。どうやってプログラムの流れに戻すかという問題が残っています。
function sendQuery(){
$.ajax({
context: this,
url: 'http://localhost:8080/testMain',
type: 'GET',
dataType: 'text',
success: getJson,
error: function (xhr, ajaxOptions, thrownError){
alert('Error xhr : ' + xhr.status);
alert('Error thrown error: ' + thrownError);
}
});
}
function getJson(data){
alert("Transmission Success.");
alert(data);
var obj = $.parseJSON(data);
alert("Parsing JSON Success.");
var apples = obj.apples;
alert(apples);
return apples;
}
さて、ツリーのデータをステージングする一連の呼び出しに APPLES 変数を取得するにはどうすればよいでしょうか。
データを処理する関数に APPLES 変数を渡す必要があります。
EDIT #2 コールバックの使用:
コールバックのアイデアを理解するのに少し時間がかかりました。これが私がそれでできたことです。
これが私のオリジナルのツリーコードです。一連の関数を呼び出してさまざまなことを行いますが、最終的にはツリーが受け入れる形式でデータを取得します。
$(function () {
$("#client_tree").jstree({
"json_data": {"data": attachTree(stageTreeData(getJson(sendQuery())))},
"plugins" : [ "themes", "json_data", "ui" ]
}).bind("select_node.jstree", function (e, data) {
var msg = data.rslt.obj.attr("id");
alert(msg);
});
});
私は現在、Ajax経由でデータを取得しようとしています.sendQuery()メソッドで、データなどを返します...]
少し変更しました。今は sendQuery() を呼び出さず、jQuery が呼び出します。
$(function (){
$.ajax({
context: this,
url: 'http://localhost:8080/testMain',
type: 'GET',
dataType: 'text',
success: loadTree,
error: function (xhr, ajaxOptions, thrownError){
alert('Error xhr : ' + xhr.status);
alert('Error thrown error: ' + thrownError);
}
});
});
また、ツリーの読み込みコードを少し変更しました...
function loadTree(data){
$("#client_tree").jstree({
"json_data": {"data": attachTree(stageTreeData(getJson(data)))},
"plugins" : [ "themes", "json_data", "ui" ]
}).bind("select_node.jstree", function (e, data) {
var msg = data.rslt.obj.attr("id");
alert(msg);
});
}
エラーも例外もありません。ツリーにはデータが取り込まれています。
助けてくれてありがとう!
EDIT#3いくつかのマイナーなものを修正: