2012-02-17 7 views
0

ドキュメントの準備が整うとJSONオブジェクトを処理する最良の方法を理解しようとしています上記のJSONオブジェクトに基づいてDOMを構築する別の関数を実行することができます。このオブジェクトは、30秒ごとに1分ごとに更新されるものです。javascript jquery post()/ get()ドキュメント準備が完了する前にJSONオブジェクトをクロージャ関数として使用する

私の最初の考えは閉鎖としてそれを構築することでした。 IEは:

var myJSONobject = $.post(uri, function(data){return data;}); 

しかし機能は私がする場合、ドキュメントの準備ができて実行すると、私はクリックイベントに基づか機能が有効であるとして、オブジェクトを認識しません。 JSONオブジェクトを返します。オブジェクト形式が有効であることを確認するためにjsonlint.comを使用しました。だから、私はイベントの文字列をどのように扱っているのかを考えている。オブジェクトが正当なものであっても、ドキュメントが準備された後にレンダリングされているので、ある意味で機能が壊れています。私は同じオブジェクトを取ると、それが吐き出され、変数としてハードコードされます。コードiveはうまく動作しています。だから私はこれを処理するための最善のアプローチが何であるかを理解しようとしています。スクリプトは途中で中断しません。そして2つは、私が正しい方法であるかのようにこれをクロージャーとして適用しようとしているかどうかを知ることができますか?このタイプのシナリオでは良い練習のロジックは何ですか? JSONオブジェクトをどこかのテキストエリアや隠しdivにロードし、それを使ってpharseしなければいけません。

+0

あなたのAJAXリクエストはJSONオブジェクトを返し、コールバック関数はJSONオブジェクトを返しますが、あなたの 'myJSONobject'変数にはそのJSONオブジェクトが含まれていません。 –

+0

なぜこの段階でPOSTを使用していますか? - あなたはフォームを提出していません。 –

+0

投稿/いずれかの方法で取得します。これは、この特定のJSONオブジェクトのプロセスの一部に過ぎません。オリジナルのロジックは、新しいデータをポーリングすることで30〜60秒ごとに再構築されるため、必要なオブジェクトを投稿/取得するだけでした。私は、私が最終的にやりたいと思っているように、最初のオブジェクトをページにレンダリングしてから、オブジェクトのすべてのポーリングで再作成することができると思います。 – chris

答えて

4

$.post関数は実際にはsuccess関数の戻り値を返しません。したがって、myJSONobjectに代入することはできません。 AJAX呼び出しがsuccededまであなたが本当にやりたいこと

var myJSONobject; 
$.post(uri, function(data){ 
    myJSONobject = data; 
    // OR work with data here 
}); 

// You cannot use myJSONobject right away 

しかし、注意してください、あなたは右の$.postを呼び出した後myJSONobjectにアクセスすることができないで、あなたは待つ必要があります。

+0

私はあなたのやり方が理にかなっていますが、同様の先験を試みましたが、私が以前に試した1つの方法は、.post()に.complete()を連鎖させる方法でした。この特定の部分のデータを扱うことができます。 – chris

0

document.readyの直前にオブジェクトが必要な場合は、jsonpテクノロジを使用し、そのスクリプトをドキュメント<head>にロードします。または、<body>の最後とそれを必要とするスクリプトの最後にロードしてください。

関連する問題