• 締切済み

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

noname#245018
noname#245018
  • AJAX
  • 回答数1
  • ありがとう数0

みんなの回答

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

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

関連するQ&A

  • JavaScriptのthisの挙動について

    JavaScriptで次のCodeのようなコードを書いて実行したところ、Outputのようになります。 原因は、thisが保持できていなかったからです。 ※先頭に#が付いているのが問題の箇所です。 Code: Array.prototype.rs = function() // rs = random sort { var ret = { list: new Array(), length: new Number() }; # var obj = { # list: this # }; var tmp = { index: new Number(), length: obj.list.length }; while((ret.length = ret.list.length) < tmp.length) { tmp.index = Math.floor(Math.random() * (tmp.length - ret.length)); ret.list[ret.length] = obj.list[tmp.index]; obj.list.splice(tmp.index, 1); } return ret.list; } var list = new Array(1,2,3,4,5,6,7,8,9); alert(list.rs()); alert(list.rs()); Output: アラートウィンドウで 2,4,6,9,3,5,1,8,7 (一例) アラートウィンドウで 出力無し 要するに、thisをobj.listに入れて、thisには触っていないのに、obj.listと同期してthisが消えているのです。 Code中で先頭に#を付けた部分を次のように変更すると期待通りに動作しましたが、腑に落ちません。 # var obj = { # num: this.join('') # }; # obj.list = obj.num.split(''); もっと簡潔な書き方や、迅速に動く書き方があればご教授頂きたいです。

  • Linuxにてテキストファイル出力の文字コード

    RedHatLinux7.3(2.96-110)、gccバージョン(2.96 20000731)にて、 C言語のアプリケーションを初めて作成しています。 そのアプリ内でテキストファイル(日本語あり)を 作成するのですが、どうも期待どおりの結果になりません。 というのも、出来上がったファイルの文字コードが、 EUCではなくShift-JISになってしまっています。 Linuxで作成したアプリをLinuxで実行するのですから、 出来上がるファイルの文字コードはEUCになるはずですよね? ちなみに、文字コードの確認は「kcc -c XXXXX.log」でおこないました。 もしかして「アプリケーションログを日本語出力する」 なんていうことが、そもそもの過ちなんでしょうか? ファイル出力には、fopen+fprintfを使っています。 どうしてこのような結果になってしまうのか、ご存知のかた、よろしくお願いします。

  • Linuxで標準出力したファイルの文字コードついて

    Linuxで2つのディレクトリの内容をtreeコマンドでそれぞれファイルに出力して、 その2つのファイルをdiffで比較して、その結果をファイルに出力するシェルを作成しました。 比較対象のディレクトリの内部には日本語でファイル名やディレクトリ名を付けているものもあります。 このシェルを手動で実行してファイルに出力された内容を確認すると、 日本語であるべきところは日本語で出力されています。 nkfコマンドでファイルの文字コードを確認すると「UTF8」となっています。 しかし、cronにてこのシェルを実行してファイルに出力された内容を確認すると 何故か日本語の部分が化けて(ASCIIのようです)しまいます。 nkfコマンドでファイルの文字コードを確認すると「ASCII」となっていました。 cronで実行した場合にも出力するファイルの文字コードを「UTF8」にしたいのですが どいうすればよいでしょうか? どなたかご教授願います。 よろしくお願いします。

  • oracleの文字コードとlinuxサーバの文字コードが異なる場合、サ

    oracleの文字コードとlinuxサーバの文字コードが異なる場合、サーバからシェルまたはsqlplusでDBに接続し、spoolコマンドで指定したファイルに、SQLの実行結果や、PLSQLのDNMS_OUTPUTで出力した内容を保存すると文字化けしてしまいます。 これを回避するにはどうすればよいのか、ご教授下さい。 具体的な環境は、下記の通りです。 oracles:SJIS(NLS-LANGはSJIS系にしています) サーバUTF8 出来ればUTF8でファイルに出力したいのですが、無理なら最低でもSJISで出力させたいです。現在は、ftpでバイナリーダウンロードさせて秀丸などのエディターで見ても、どちらとも認識できない文字コードになっているようです。 なお、お客様側のサーバなので、DBやOSの文字コードを変えることはできません。

  • jqueryのajax()内からグローバル配列に

    jqueryのajax(){success: function()内からグローバル連想配列に値を格納したい。 jqueryのajax()でhtmlファイルを読み込み配列に格納。 その後他の関数で使いたいと考えていますが グローバル連想配列に格納できません。 success: function()内でさらに関数を定義もして見ましたが反応せず。。。 (プルダウンメニューを変更したら実行する関数) 以下ソースになります。 ----------------------------------------------------------- $(function() { objectarray = new Object(); $.ajax({ type: 'GET', url: 'hoge.html', dataType: 'html', success: function(data) { var text = [];   $(data).each(function(i){ text = $(this).text().split("\n"); }); var alldata = $.grep(text, function(e){return e;});//空白やデータなしを削除 for(i=0; i<alldata.length; i++){ objectarray[i] = (alldata[i]); alert("forの中" + objectarray[i]);//取得できた } alert("forの外" + objectarray);//取得できた return objectarray;//あってもなくても変わらない。。。 }, error:function() { alert('問題がありました。htmlデータがありませんでした。'); }             //return objectarray;←有効にするとjsが認識されなくなります。 }); alert("ajaxの外" + objectarray[0]);//何も表示されない、firebugでみるとobjectarrayには値が入っている。 }); ----------------------------------------------------------- 上記はnew Object()でやっておりますがnew Array()でも同じ結果でした。 回避策をご教授いただけましたら幸いです。 どうぞよろしくお願いいたします。

  • linux上で「java + poi」の変わりになるもの

    linux上で、「java + poi」で作ったプログラムを毎日自動的に実行して結果をexcelファイルに出力する、ということをしています。 同じことを、java以外の言語を使って実現することは可能でしょうか? linuxではなくwindows上で行うとすれば、「様々な言語 + Win32OLE」で実現可能かと思いますが、あくまでも"linux上で"できないか?という質問です。 何かご存知の方がいらっしゃったら、ご回答よろしくお願いいたします。

  • LinuxにJ2EEのインストール

    LinuxにJ2EEのインストールが思うように上手くいきません。 # chmod 544 java_ee_sdk-5_08-jdk-6u17-linux-ml.bin # ./java_ee_sdk-5_08-jdk-6u17-linux-ml.bin J2EEのbinファイルを格納したディレクトリで、 以上のようなコマンドを打ちました。(root権限を持つユーザで) しかし、以下のような結果が出力されてしまいました。 2時間以上様子を見ていましたが全く動く気配が無い為、 恐らくエラーになっていると思われるのですが、原因がわかりません。 原因と解決策がご存知の方は教えてください。 ------------------------------------ 使用可能なディスク容量をチェックしています... Java(TM) 2 Runtime Environment をチェックしています... Java(TM) 2 Runtime Environment ファイルを抽出してます... *** glibc detected *** double free or corruption (!prev): 0x0806df48 *** 一時ファイルを削除しています... ------------------------------------ LinuxのOSはVineの4.2です。 プロジェクトの開発都合上、少し前のOSです。 実際には、Linux(Vine4.2)サーバにJava環境を入れるのですが、 Linuxを操作するのは初めてで、VMwareにLinuxを入れて インストール方法を勉強中です。

  • LINUXについて質問です。

    LINUXのOS起動時に、同時に実行させるコマンドをどこに書けばよいかを おしえてください。 たとえば、私はApacheをソースからビルドしていますが、そのパスが /usr/local/apache/bin/apachectl となります。 これをLINXUのboot時に同時に /usr/local/apache/bin/apachectl start というコマンドを実行させたいのです。 LINUX実行時に同時にデーモンを起動させるには /etc/rc3.d/以下に各バイナリのシンボリックなどを置いておけば (ランレベル3がCUIで起動時の自動実行レベル?なんですよね?) 動くことはわかりました。 ただこれではなく 直接コマンドを書いておいて、それを実行させるということをしたいのです。 ただ、以前LINUX起動時にどこかのドットファイルにLINUXのコマンドを書いておけば 起動時に自動で実行されるとみたきがするのです。 サーバー類に詳しい方おしえてください。 LINUXはCentOS6.0系です。

  • LinuxへのJDK6のインストール

    Fedora 6にJDKをインストールしようと思います。 CDROMをマウントしました。 書籍付録のCDROMのファイル名がTM_JSPSERVLET4で、 ディレクトリ構成としては、 /TM_JSPSERVLET4/Linux/jdk-6u1-linux-i586.bin となっております。 書籍の指示とおり、 [root@localhost ~]# cd /usr/local/ [root@localhost local] /media/TM_JSPSERVLET4/Linux/jdk-6u1-linux-i586.bin とすればインストール開始するはずなのですが、 /media/TM_JSPSERVLET4/Linux/jdk-6u1-linux-i586.bin 許可がありません。 と表示されました。 何がまずいのでしょうか?

    • ベストアンサー
    • Java
  • linuxでjavaがうまく動きません。

    linuxでjavaがうまく動きません。 Linux初心者です。JAVAを勉強しなければならなくなりました。SUSE Linuxです。マシンは自作のようですが、先輩が作ったものなのでよく分かりません。 まず、JDKをインストールしました。すると、パソコンを起動する時に「64ビットのマシンに32ビットのソフトウェアが入っています」というようなメッセージが表示されるようになってしまいました。これはJDKのせいだと思ったので、一度削除して64ビットのJDKと書いてあるソフトをもう一度インストールしました。(しかし、したつもりでしたがこれはできていませんでした) すると、JAVAが動かなくなってしまいました。 よく調べたところ、64ビットのJDKは32ビットのJDKをインストールした上でインストールしなければいけなかったということでした。 そこで、もう一度32ビットのJDK(jdk-6u22-linux-i586.bin)をダウンロードして実行し、64ビットのJDK(jdk-6u22-linux-x64.bin)を実行しました。 それから、「.bash_profile」のファイルに PATH=$PATH:$HOME/bin:usr/local/jdk1.6.0_22/bin JAVA_HOME=/usr/local/jdk1.6.0_22 export JAVA_HOME export PATH と書き込みました。 しかし、「javac」と入力するとコマンドがないと言われます。「java -version」と入力すると「"1.5.0_20"」と表示されます。多分「"1.6.0_22"」とか表示されないといけないのかな、と思ったので、前にインストールしたものが残っているのかと探してみましたが、いろんなサイトを参照しながらインストールしたので見つかりません。(というか、インストールしたものは全部アンインストールしたつもりでした) JAVAが動くようにするにはどうしたらいいのでしょうか?