締切済み

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

  • 困ってます
  • 質問No.7216003
  • 閲覧数489
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 0% (0/3)

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

回答 (全1件)

  • 回答No.1

ベストアンサー率 61% (1594/2576)

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

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

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

充分に時間がたってから'(b)を実行するようにすれば、予定の結果になる可能性はありますが、上記の方法が確実です。(alert文を入れると結果的に時間調整の役割を果たします)
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ