私はプロジェクトの所有者IDとプロジェクトのタイトルを含む 'projects'の配列を持っています。AJAXはinsideループを要求します:前の呼び出しの応答に基づいて特定のajax呼び出しを中止しますか?
「プロジェクト」配列をループし、AJAXを使って各プロジェクトの「所有者ID」を渡すことで、各プロジェクトの所有者名を取得したいと考えています。
var projects = [
{owner_id: 1, title: "First project by id one"},
{owner_id: 2, title: "First project by id two"},
{owner_id: 1, title: "Second project by id one"},
{owner_id: 3, title: "First project by id three"}
];
//iterate through the 'projects' array to get the project's owner_id its respective owner_name
var owner_names = {};
projects.forEach(function(project) {
//check if the id exist in the owner_names key-value pair
if (project.owner_id in owner_names) {
//go the next iteration because we already know the owner name
return;
}
//get username by id
$.ajax({
url: '//some.com/get/owner_name/by/id/',
data: project.owner_id
}.then(function(data) {
owner_names[data.id] = data.name;
console.log("First project by " + data.name + " is " + project.title);
});
});
私は繰り返しは、「IDの1による最初のプロジェクト」だったとき、私はデータを得ているだろうので、プロジェクトの反復は「IDの一つ目のプロジェクト」であるとき、Ajaxの機能を呼び出していない/中止します。言うことです
、私が欲しいの出力には、この(アリス、ボブとチャーリーは、それぞれで、1,2,3をOWNER_ID仮定):
First project by Alice is First project by id one
First project by Bob is First project by id two
First project by Charlie is First project by id three
しかし、その代わりに、私はこのを得ました:
First project by Alice is First project by id one
First project by Bob is First project by id two
First project by Alice is Second project by id one
First project by Charlie is First project by id three
asynchronousityを維持しながら、どのように私はAJAXで( "非同期= false" に使用せずに)これを達成できますか?
それだけです。ありがとう –