都道府県穴埋めゲーム

jQuery.getでレスポンスデータを取り出す方法

いつもお世話になっています。
jQueryのajaxを用いてサーバのphpとデータをやり取りしています。
以下の件に関して質問させていただきます。

jQuery.get( url, data, callback(data, textStatus, XMLHttpRequest), dataType)

でレスポンスデータを取り出す方法がわかりません。

callbac関数に引数で渡されたdataをcallback関数の中でalert(data);としたり、htmlのタグに書き込む操作はうまくいくのですが、callbackの引数dataをjQuery.getの外に取り出すにはどのようにすればよいのでしょうか?
よろしくご教授お願いします。

A 回答 (3件)

No.1です。


jQuery.get()は、非同期(async=true)のXMLHttpRequestを出しています。
非同期ですから、phpから応答が帰ってくるまで、responseTextは空ですし、
XMLHttpRequestのステータスもハンドリング出来ません。いつ応答が帰ってくるかをハンドリングするのが手間なので、コールバック関数を使うのです。
jQuery.get()では、リクエストが正常に投げられ、サーバーが正しく(?)結果を返した時のみ、結果を引数として、コールバック関数が呼ばれるます。
この機能を使ってコーディングを短くしているという訳です。
だから、
var res = jQuery.get(,,,).responseText;
はよろしくないと思います。
同期通信(async=false)なら別ですから、こうすればうまくいくかも...
jQuery.ajax({
async:false
});
var res = jQuery.get(,,,).responseText;

この回答への補足

お礼への補足で恐縮ですが、たとえば・・・・

var strUTF = php({func: 'mb_convert_encoding',argv: 'strSJIS,UTF-8,Shift_JIS',require: ''});

のようなことがしたいわけです。
本題と少し離れますが、javascriptで便利な関数を集めたライブラリが
あればご紹介いただければ幸甚です。(ajax,DOM操作のライブラリは多数ありますが・・・・・)
失礼しました。

補足日時:2010/03/04 17:35
    • good
    • 0
この回答へのお礼

明快なコメントをありがとうございます。
jQuery.ajaxで同期通信して何とかなりそうです。
私の場合サーバ側の処理にそれほど時間はかからず、その間クライアントで特別な作業もしませんので同期通信で十分です。

今までC++,javaでstandalone aplicationを、またphpでweb applicationwを作ってきましたが、webはサーバupの必要やactionに画面遷移を伴うなどの欠点があり、またstandalone application開発の困難さはwebの類ではありませんでした。
その点jQuery/ajaxを使ったapplication(html/hta)が気に入っています。
しかし、javascriptはphpに比べるとlibraryが少なく、ちょとした事も最初からcodingする必要がありますので、phpをWeb Servise的にajaxで利用することを考えています。
その過程で出てきた疑問です。ありがとうございました。

お礼日時:2010/03/04 16:14

> jQuery.get( url, data, callback(data, textStatus, XMLHttpRequest), dataType)



この書き方だと、第二引数は「callback()を実行した戻り値」ですが、function callback(){}は、ちゃんとfunctionオブジェクトを返していますか?

jQuery.getが終わってからcallbackを実行したいなら、
jQuery.get( url, data, callback, dataType);
このように書かないと行けないと思いますが。

この回答への補足

失礼しました。説明用の表記で実際のcodingはおっしゃる通りかもしれません。

補足日時:2010/03/04 18:23
    • good
    • 0

意味がよくわかりませんが、単に他の関数に値を引渡したいだけですか?


だとすると、ajaxとかライブラリー以前の問題だと思いますが....
例えば、

jQuery.get( url, data, callback_hoge(data, textStatus, XMLHttpRequest), dataType);

function callback_hoge(data, textStatus, XMLHttpRequest){
other_func(data);
}

function other_func(data){
alert(data);
}

あるいは、引渡しが面倒ならグローバルな変数を定義しておいて、
var my_result;
jQuery.get( url, data, function(data, textStatus, XMLHttpRequest){
my_result=data;
other_func();
}), dataType);

function other_func(){
alert(my_result);
}

とか...

この回答への補足

早速回答ありがとうございます。
callback_hogeの中で処理をすればのですが以下のようなことができないかと思いました。

function button_click_proc(){
var res = jQuery.get( url, data, callback_hoge(data, textStatus, XMLHttpRequest), dataType).responseText;
$("#fuga").html(res);
}

jQuery.get()はXMLHttpRequestオブジェクトを戻り値に返すとのことで、urlが単純なsample.txtの場合、引数data, callback_hoge,dataTypeなしでresponseTextを使用してうまくいく例があるのですが、引数data, callback_hoge,dataTypeを伴ってsample.phpにリクエストした場合「この操作を完了するのに必要なデータは、まだ利用できません。」とのエラーが出ます。

引数で受け渡しする場合は最後にcallback_hogeに戻るのでグローバル変数をセットする方法が私の意図に近いかもしれません。ありがとうございます。
responseTextの使い方について何かヒントかコメント頂ければ有難いです。よろしくお願いします。

補足日時:2010/03/04 13:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報