0

私には2つの機能があります。最初にページにsvgをロードし、2番目<path>にいくつかのsvgで特定の色を変更します。

この関数は次のようになります。

get_svg_part(category,position,part_name);-- ajax を含む

svg_part_color(category,position,color,parameter);-- get_svg_part() の後に実行する必要があります

svg をロードするだけで色を変更しない場合があります。別のケースでは、svg をロードしてその中のカップルの色を変更する必要があります。それが私が使用していないか、successまたはcompliteajaxである理由です。また、ページの読み込み時にそれを行う必要があるため、すべて(2つの関数と呼び出し)を前に置きます(jQuery(document).ready()この情報が必要な場合)。

$.when私はandでそれをやろうとしました.thenが、これは効果がありません:

$.when(get_svg_part('accent','bottom',' U+1F60A')).then(svg_part_color('accent','bottom','#FF7892',0));

たぶんsvg_part_color();、ある意味で非同期にする必要がありますか?もしそうなら、どうやって?

質問:関数を次々に機能させる方法(ajaxリクエストを含む)?

これが次のように機能する場合はクールです。

get_svg_part('accent','bottom',' U+1F60A');
svg_part_color('accent','bottom','#FF7892',0);

$.when(get_svg_part()).then(svg_part_color()); // just set a rule and not execute function here

// or maybe put this rule in svg_part_color() function


更新: get_svg_part コード:

function get_svg_part(cathegory,position,part_name){ 
   $.ajax({
    		url: "img/icons/parts/"+cathegory+"/"+position+"/"+part_name+".svg",
    		type: 'GET',
    		dataType: 'html',
    		success: function( data ){
    			let rate_block_rated = movie_block.find('.movie_rating.rated'); //rate_block_rated
    			let svg_symbol = rate_block_rated.find(".composite_rate svg ."+cathegory+"."+position);
    			// prepend (insert) data to svg_symbol (accent bottom),
    			// then find inserted svg, and delete svg tag (unwrap path)
    			svg_symbol.prepend(data).find('svg').children().unwrap();

    		}
    });					
};

4

1 に答える 1

1

最初の関数が ajax に関連する promise を返す限り、次のようなことができます。

function get_svg_part(a, b, c){  

    // return the jQuery `$.ajax()`, `$.post()`, `$.getJSON()` 
    // or whatever method you are using    
    return $.ajax({/* options */})

} 

使用法:

get_svg_part().then(function() { 
   svg_part_color('accent','bottom','#FF7892',0);
})
于 2020-05-30T17:08:31.243 に答える