• 締切済み

linuxサーバーでjQueryの挙動がおかしい

ローカルの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タグも含めてきちんとできています。 あまりにも意味が分からないので、ご存知の方がいらっしゃいましたらよろしくお願いいたします。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

'(b)っていうのはコールバック関数の外ということでしょうか? resopnseの処理のついてはコールバック関数の中で処理するようにしないといけません。 直接書くのがわかりにくければ、関数化しておいてコールバックの中から呼び出すようにすればよろしいかと。 理由は、ajaxでレスポンスを受け取るまでにタイムラグがあるので、結果を取得する前に'(b)のコードが実行される可能性が高いからです。(実行順序を冷静に考えるとわかるはず) 充分に時間がたってから'(b)を実行するようにすれば、予定の結果になる可能性はありますが、上記の方法が確実です。(alert文を入れると結果的に時間調整の役割を果たします)

すると、全ての回答が全文表示されます。

関連するQ&A