私はリクエストに応じてJSONを返すAPIを使用しています。このJSONには、次のレベルのURLの名前またはファイル名のいずれかがあります。未知のjsonオブジェクト/ツリーの再帰的なトラバーサルと返されたjsonに基づくアクション
問題は、コードがどのJSONが返されるかを認識することです。
JSONに次のURLレベルの名前しかない場合は、URLを作成して取得します。 その後、再帰的に名前やファイルの新しいセットを取得し、認識して実行します。必要に応じて深くメニューレベルにすることができます。 1〜*
ファイル名がある場合は、それを取得してhtmlとしてレンダリングする必要があります。 (これはすでに解決され)これらはhttp://my.api.call.com/New_url_1_level_1.../New_url1_level_2/に変わるでしょう
{id: 'New_url_1_level_1', id:'New_url_2_level_1', id:'New_url_3_level_1'}
//or
{id:'001200.file.ext',id:'001300.file.ext'...}
JSONの
例...
の問題は、どのようにURLのをループにし、最終的には例えばファイル名を取得します: http://my.api.call.com/New_url_1_level_1/New_url_1_level_2/New_url_1_level_3/001300.file.ext
私の現在のスクリプトは次のとおりです。
var json;
var urllevel= '/First_level';
var api = 'http://my.api.call.com';
var re = /^\d+/g; // Regex to match filename (decide if json has filenames or urls; files always start with digits or end with extension)
var loopApiUrl = new Array();
var recursion = false;
// This is the problem - how to recursively build url's based on returned data i.e. traverse a "unknown" tree
function recursePxJson(){
if (!recursion) {
loopApiUrl = [];
}
// Get JSON
$.get(api+urllevel+'/'+loopApiUrl.join('/'),function(data,status){
for (var i in data) {
if (!re.test(data[i].id)) { // {id: 'This_is_to_be_appended_to_url', id:'Another_appendable'}
recursion = true;
loopApiUrl.push(data[i].id);
recursePxJson();
}
else { // {id:'001200.file.ext',id:'001300.file.ext'}
load(api+urllevel+'/'+loopApiUrl.join('/')+'/'+data[i].id);
recursion = false;
}
}
});
//loadDBS(param);
}
// Load renderable JSON - ALREADY SOLVED
function load(param){
$.get(param, function(data, status){
json = JSON.stringify(data);
var title = data.title.split(':');
html = '<h2>'+title[0]+'</h2>';
html += '<h3>'+title[1]+'</h3>';
html += '<h5>Values:</h5>';
for (var i=0; i<data.variables.length; i++) {
html += '<b>'+data.variables[i].text+': </b>';
varlen = data.variables[i].valueTexts.length;
if (varlen > 6) {
html += '<i>'+data.variables[i].valueTexts[0]+', '+data.variables[i].valueTexts[1]+', '+data.variables[i].valueTexts[2]+' . . . '+data.variables[i].valueTexts[varlen-3]+', '+data.variables[i].valueTexts[varlen-2]+', '+data.variables[i].valueTexts[varlen-1]+'</i>'+'<b> (yhteensä '+varlen+' arvoa)</b>';
} else {
html += '<i>'+data.variables[i].valueTexts.join(',')+'</i>';
}
html += '<br/>';
}
$(html+'<br>').appendTo($('#tab2'));
});
}
EDIT:現時点では、別のループを開始する前にループごとにそうであるように見えます。したがって、それはループで始まり、別のものが起動されていれば、それが実行される前に実行されません。
メインループ 内部ループ1 内部ループ2 < - これは最初に行うべきではありませんか?
あなたのリンクが機能しません、有効なデータを提供してください – dllhell