天使と悪魔選手権

ローカルのWindows7で正常に動作するjQueryが、linux(Cent OS)のレンタルサーバーで動作しなくて困っています。

$("#tagA").load("file.inc",function(responseText,textStatus,XHR){
g = responseText;u = g.split("\n"); '(a)
}); '(b)

上記のコードでfile.incを読み込んで変数gに格納し、それを行ごとに配列uに格納し、
それをforで回していろいろ成形して、最終的には出力しているのですが、
linux上で実行するとuがカラで、その後のコードが実行されないのです。

確認したところ、'(a)の箇所にalert(g);やalert(u.length);を入れると中身がある結果を出しますが、'(b)だとgがundifinedになり、よってu.lengthは0になります。なのでその後のfor内が実行されないのでしょう。htmlファイル自体は最後まで出力されています。
この結果を受け、これ以降のコードを上記最後の"});"の前に移してみたところ、その部分だけが実行され、前後のhtmlもjavascriptも出力されていませんでした(ソースコードを表示させて確認しました)。ブラウザはIE9です。

同じことをローカルのubuntu機(ブラウザはFF)で行ったらほぼ同じ結果でした。こちらはalert文を入れておくと正常に表示されるようです。

ファイルのエンコードはutf-8です。htmlのcharsetはscriptタグも含めてきちんとできています。
あまりにも意味が分からないので、ご存知の方がいらっしゃいましたらよろしくお願いいたします。

A 回答 (1件)

'(b)っていうのはコールバック関数の外ということでしょうか?



resopnseの処理のついてはコールバック関数の中で処理するようにしないといけません。
直接書くのがわかりにくければ、関数化しておいてコールバックの中から呼び出すようにすればよろしいかと。

理由は、ajaxでレスポンスを受け取るまでにタイムラグがあるので、結果を取得する前に'(b)のコードが実行される可能性が高いからです。(実行順序を冷静に考えるとわかるはず)

充分に時間がたってから'(b)を実行するようにすれば、予定の結果になる可能性はありますが、上記の方法が確実です。(alert文を入れると結果的に時間調整の役割を果たします)
    • good
    • 0

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