電子書籍の厳選無料作品が豊富!

jQueryでXMLを読み込んでパースした値を戻り値として返す関数を作っているのですが、なぜか動作しません。
すみませんがどこがいけないのか教えていただけないでしょうか?

-- JS ----------------------
function getValueXML(){
  var value = "初期値";
  jQuery.ajax({
    url: "/text.xml",
    type: 'get',
    dataType: 'xml',
    timeout: 1000,
    success: parse_suc,
    error: parse_err
  });

  function parse_suc(xml){
   value = $(xml).find("hoge").text();
  }
  function parse_err(){
   alert("XMLの取得に失敗しました");
  }
  return value;
}

-- test.xml ---------------------
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <hoge>テスト</hoge>
</root>

このgetValueXML関数を実行すると戻り値には"初期値"が返ってきます。
試しにparse_suc関数を以下のようにしてみたら"テスト"がアラート表示されました。
つまりparse_suc関数内ではXMLのパースがうまくいっているようなのです。

function parse_suc(xml){
  value = $(xml).find("hoge").text();
  alert(value);
}

しかしparse_suc関数を出るとvalueにはその値が引き継がれません。
valueのスコープがjQueryだとどういう風になっているのかよくわからなく、ずっと悩んでいます。
お手数ですがおわかりの方がいましたらご説明頂ければと思います。

A 回答 (1件)

jQuery.ajaxでasyncフラグを特にセットしていないので、


jQuery.ajaxはデフォルトの非同期通信動作をします。
なので、コールバック関数parse_sucが呼ばれるのは、
function getValueXMLを抜けた後です。
値引き継ぎとかスコープの問題以前に、
return value;を通過した時点では、まだparse_sucは呼ばれてさえいません。

あと、jQueryを使っていようがJavaScript のスコープは変わりませんよ。
(jQueryはただのライブラリなのでJavaScriptの言語仕様が変わったりはしない。)
    • good
    • 0
この回答へのお礼

こんな夜中にどうもありがとうございます!
jQueryはそういう仕様だったのですね・・・。
asyncをfalseにして同期通信にしてみたらうまく戻り値に値が入りました!
この辺り、もっと勉強しないとダメですね・・・。

教えてくださって本当にありがとうございました。

お礼日時:2012/12/31 01:41

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