$('selector').on("click",
function(){
$.get("hoge.php", {num: num},
function(xmlhttpreq){
modorich = なんか処理(xmlhttpreq);
}
);
$(this).animate({left: 0},
complete:function(){
var hensu = modorich;
}
);
}
);
で、上記の$.getで取得したmodorich を抜けた後のhensuに入れたいのですが、
どうすれば入りますか?
returnとかを使うのでしょうか。
ちなみに$.getのfunction内に入れる、というのはなしでお願いします。
functionの全体がわからないですが、modorichをグローバル変数にして、こんな感じで渡せると思います。
$('selector').on("click", function(){ var modorich; $.get("hoge.php", {num: num}, function(xmlhttpreq){ modorich = なんか処理(xmlhttpreq); } ); $(this).animate({left: 0}, complete:function(){ var hensu = modorich; } ); } );
これではhensuはundefinedになってしまいます。
変数の代入がどうとか言うことではなく、Ajax が非同期で動作するから「値が渡らない」みたいになってるんです。
同期モードでリクエストを出す必要があります。
$('selector').on("click", function(){ var modorich; $.ajax({ url: "hoge.php", type: "GET", async: false, data: "num=" + num, success: function(xmlhttpreq){ modorich = なんか処理(xmlhttpreq); } } ); $(this).animate({left: 0}, complete:function(){ var hensu = modorich; } ); } );
関連するマニュアルは、これ。
http://api.jquery.com/jQuery.ajax/
ちなみに$.getのfunction内に入れる、というのはなしでお願いします。
どのような事情で、この制約が付いているのか分かりませんが、変数のスコープとか、処理のタイミングとかについてきちんと理解できるまでは、みんなと同じ書き方をするようにした方が良いですよ。
$('selector').on("click", function(){ var obj = $(this); $.get("hoge.php", {num: num}, function(xmlhttpreq){ var modorich = なんか処理(xmlhttpreq); obj.animate({left: 0}, complete:function(){ var hensu = modorich; }); } ); } );
やはり同期の部分ですよね。
実際は全体としてはアニメーションを表現しているので、
同期待ち?をしたくなかったのです。
$.ajax($.get)の中のcomplete(success) function の中で$(this)を使いたかったのですが、parent、先祖子孫?等を使っても辿れません。
"click"された"this"が存在しない気が・・・
↑の"selector"がajax後のfunctionでthis系で表現できれば、
それでもOK回答とします。
$.ajax($.get)の中のcomplete(success) function の中で$(this)を使いたかったのですが、parent、先祖子孫?等を使っても辿れません。
"click"された"this"が存在しない気が・・・
↑の"selector"がajax後のfunctionでthis系で表現できれば、
それでもOK回答とします。
そんな気もしたので、ふたつ目に書いたソースでは、
というふうにしてあります。
クリックするものがたくさんあるのだったら、クリックされた要素はクロージャのスコープに入れておいた方が良いかも。
こんな感じ。
$('selector').on("click", function(){ var f = (function() { var obj = $(this); return function(xmlhttpreq) { var modorich = なんか処理(xmlhttpreq); obj.animate({left: 0}, complete:function(){ var hensu = modorich; }); } })(); $.get("hoge.php", {num: num}, f); } );
いろいろ整理した結果、こうなりました。すっきり。
http://jsfiddle.net/aNaS3/3/
仕組みがまだよくわかりませんが、when、thenでできました。
ありがとうございます。
いろいろ整理した結果、こうなりました。すっきり。
2013/05/23 18:03:59http://jsfiddle.net/aNaS3/3/
仕組みがまだよくわかりませんが、when、thenでできました。
2013/05/24 04:12:53ありがとうございます。