LoginSignup
24
24

More than 5 years have passed since last update.

Ajax備忘録

Last updated at Posted at 2015-06-12

よく忘れるのでまとメモ。

通信完了後の処理に何か値を引き継ぎたい

取得したいデータ (ファイル) が複数あって、それぞれを繰り返し処理するときに、iをdoneに突っ込んだりしたいときがたまにある。

JavaScript
var hoge = [a,b,c,d]; // なんかデータ取得用のURLが書いてあるとする。

var getData = function(url){
  return $.ajax({
    type: 'GET',
    url: url,
    dataType: 'jsonp'
  });
};

for (var i = 0, len = hoge.length; i < len; i++) {
  getData(hoge[i]).done(function(data){
    // 何か処理
    // ここにiとか別の値とか、とにかく任意の値をつっこみたい。
  });
}

こういうときはコンテキストで引き継ぐ。

JavaScript
var hoge = [a,b,c,d]; // なんかデータ取得用のURLが書いてあるとする。

var getData = function(url, i){
  return $.ajax({
    type: 'GET',
    url: url,
    dataType: 'jsonp',
    context: i
  });
};

for (var i = 0, len = hoge.length; i < len; i++) {
  getData(hoge[i], i).done(function(data){
    // 何か処理
    console.log(this); // iがかえってくる。
  });
}

複数指定も可能。

JavaScript
var hoge = [a,b,c,d]; // なんかデータ取得用のURLが書いてあるとする。

var getData = function(url, i){
  return $.ajax({
    type: 'GET',
    url: url,
    dataType: 'jsonp',
    context: {
      num: i,
      mogu: 'fuga'
    }
  });
};

for (var i = 0, len = hoge.length; i < len; i++) {
  getData(hoge[i], i).done(function(data){
    // 何か処理
    console.log(this.num); // iがかえってくる。
    console.log(this.mogu); // fugaがかえってくる。
  });
}

繰り返しで並列Ajax通信するけど順番守ってほしい

この方の記事でばっちり。

JavaScript - 結果の順番を保証して、且つ『並列』でAjax通信を行う方法 - Qiita

実行するAjax通信を配列に詰めておいて、配列を$.when.applyの引数に渡すだけ。

そもそもAjaxに渡す内容がバラバラなんだけど

引数を配列にでも突っ込んでおく。

JavaScript
var request = [
  {
    type: 'GET',
    url: 'url1',
    dataType: 'jsonp',
  },
  {
    type: 'GET',
    url: 'url2',
    dataType: 'html',
  }
];

var getData = function(request){
  return $.ajax(request);
};

for (var i = 0, len = request.length; i < len; i++) {
  getData(request[i]).done(function(data){
  });
}

Ajaxに限らず、プラグインのオプション受け渡しとか何にでも使える。

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24