2012-04-19 2 views
0

サーバ側PHPスクリプトAJAX JSONロックブラウザ

echo " "; 
while(connection_aborted()==0) { 
    sleep(10); 
} 

クライアント側jQueryのコード(作業細かい)

$.post("/url/to/server", some_data, function (d) { 
    console.log(d); 
}) 

クライアント側jQueryのコード(問題を引き起こす)

$.post("/url/to/server", some_data, function (d) { 
    console.log($.parseJSON(d)); 
}) 

最初のJQueryコードを実行してブラウザをリフレッシュすると、すべてが正常に動作します(ブラウザがリロードされます)。 2番目のJQueryコード(parseJSONに気付く)を実行してブラウザをリフレッシュしようとすると、ブラウザはロックされ(Chrome)、リロードされません。 jqueryポストがこのロックを引き起こしていますが、私はその理由を理解していませんか?なぜコールバック関数内のparseJSONがブラウザをロックさせるのですか?このための回避策はありますか?

FYI:実際のコードでは、実際のコードでサーバー側から実際のJSONデータを渡し、JQueryを使用して処理しています。

答えて

0

は、まだ私達があなたのJSONのサンプルを必要と動作しない場合は

$.post("/url/to/server", some_data, function (d) { 
    console.log(d); 
}, "json"); 

を試してみてください、それを与えます。

+0

でも、その関数内に$ .parseJSONを持つのと同じ結果が試されました。ブラウザはまったく更新されません! –

+0

JSONサンプル:{"connected_users":1、 "image":{"append_images":[{"image_id": "65106"、 "url": "http:\/\/a5.sphotos.ak.fbcdn.net \/hphotos-ak-ash4 \/s2048x2048 \ /392472_10150740932392622_143076282621_9409919_12445871_n.jpg "}、.................. {" image_id ":" 65107 "、" url ":" http:\/\/a2.sphotos.ak.fbcdn.net \/hphotos-ak-ash3 \/s2048x2048 \ /559516_391927920841880_184289921605682_1308515_1885941461_n.jpg "}]、" current_image_id ":" 65109 "}} –

+0

これは無効ではなく、 .... "、私はコメントを投稿するために600文字制限があるので、そこに置くだけです。 JSONはphp json_encodeによって作成されていますが、無効な方法はありません –

0

$.parseJSONがあなたのブラウザを永久にブロック/ロックする正当な理由はないようです。変数"d"は正確に受信していますが、そのサイズは何ですか?チェックして、ブラウザ側で間違っ起こっている正確に何を参照して

Chrome --> Right click --> Inspect element --> 
Profiles --> Collect Javascript CPU Profile 

また、あなたがに行く必要があります。

+0

サイズは文字通り数KBのように非常に小さいです。私はPHP側でいくつかのテストを行いました。ブラウザ上で「更新」をクリックすると、connection_aborted()はまだ「0」を返しています。つまり、接続が維持されています。なぜ、私は理解していないのですか? –

+0

あなたのjsonはサイズに何も問題はないはずです。だから私はそれがおそらくサーバー側のPHPスクリプトの問題になる可能性が疑わしい。しかし、あなたは$ .parseJSONなしで言うなら、GODがあなたのために作ったかのようにすべてが機能します。私たちからまだ隠されている何か奇妙なここに見える:) –

+0

私は良い理由のために睡眠を使用しています、私はそれに入ることはありません。 connection_aborted()はページを更新するときに "1"を返します。しかし、私がpaseJSONを持っていれば、PHPスクリプトは動作し続けます。 –