0

我有 2 个功能:首先在页面上加载 svg,然后<path>在某些 svg 中更改某些颜色。

这个函数看起来像:

get_svg_part(category,position,part_name);-- 包含ajax

svg_part_color(category,position,color,parameter);-- 需要在 get_svg_part() 之后执行

我有一些情况,我只是加载 svg 而不改变颜色,在另一种情况下,我需要加载 svg 并改变其中的情侣颜色。这就是为什么我没有使用successcomplite在 ajax 中。我还需要在页面加载时执行此操作,因此我将所有(2 个函数和调用)放在之前jQuery(document).ready()(如果需要此信息)。

我试图做到这一点$.when.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 相关的承诺,您就可以执行以下操作:

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