2012-04-26 15 views
-1

読んでいただきありがとうございます。私はちょうど舐めるように見える難点があります。 JSONオブジェクトに基づいてテーブル行を作成するjQueryプラグインを作成しました。このプラグインでは、異なるキー/値のペアを持つ同じ変数名を持つ新しいJSONオブジェクト(これを上書きしたい)を生成するAJAX呼び出しを持つページネーションを作成したいと考えています。成功すると、データに警告することはできますが、警告しているデータの変数にはアクセスできません。jQueryからJavascript変数を返すAJAX呼び出しは前のJavascript/JSONオブジェクトを上書きする

var grid = { 
    "name": "test", 
    "columns": 
    [ 
     {"name":"col1"}, 
     {"name":"col2"} 
    ], 
    "rows": 
    [ 
     {"name":"col1", "value":"text1"}, 
     {"name":"col2", "value":"text2"} 
    ] 
} 
$("#myDiv").makeTable(); <-- plugin that creates table based off this JSON 
// if I alert grid.columns[0].name I get col1 no problem. 

それから私は、私は私のmakeTable()プラグイン内からのコードブロックを持ってループにいくつかのjQueryのものを行うと、テーブルを作成し、問題はない...

$.ajax({ 
url: 'get_json-pages.php', 
type: "GET", 
data: form_data, <-- my string 
dataType:"script", <-- set it to script because the output is just the javascript 
success: function(data) { 
      alert(data); <-- alerts perfectly, looks like the same JSON above but 
      with different key/value pairs 
      the alert looks like this: 
      var grid = { 
       "name": "test", 
       "columns": 
       [ 
        {"name":"col3"}, 
        {"name":"col4"} 
       ], 
       "rows": 
       [ 
        {"name":"col3", "value":"text3"}, 
        {"name":"col4", "value":"text4"} 
       ] 
      } 

      now when I do this: 
      alert(grid.columns[0].name); 
      it is a blank alert? 
} 
}); 

新しいデータセットを表示するために、JSONオブジェクトをAJAX JSONおよびReload my pluginで上書きするにはどうすればよいですか?

ありがとうございます!

+0

コード内に解説を残す場合は、実際のコメントを使用して、実際に何が実行されているかを確認できます。そのコードが実際に実行されている場合(最初のアラートを使用しているとします)、次に 'grid'という変数を宣言すると、次のアラートは[jsFiddle](http://jsfiddle.net/GfCKW/)で動作します。しかし、 'dataType:"スクリプト "を指定したので、実際にはオブジェクトではなく文字列である' data'のプロパティにアクセスしようとしていると思います。 – Sinetheta

答えて

0

あなたは、ユーザーが渡されないもの以外のものにプラグインをアクセスさせるべきではありません。「プラグイン」がオブジェクトを受け入れるようにするには、プラグインへの参照を渡す必要があります。

$("#myDiv").makeTable({data:grid}); 

ページ設定には、次の2つの方法のいずれかを使用できます。簡単な答えは、ページ区切りの呼び出しごとにプラグインを再実行することです。

$.ajax({ 
success: function(data) {  
    var grid //construct new object from data 
    $("#myDiv").makeTable({data:grid}); 
} 
}); 

また、プラグインに「データソース」を許可することもできます。あなたはajaxソースが意味することに応じて、これは簡単です(一度にすべてのデータを取得する)、または面倒です(一度にデータの各 "ページ"を取得するようにリクエストを変更する)。

+0

あなたのご意見ありがとうございます。私は私がやっていることをやっている理由をいくつか持っています。そのローカルアプリではなく、一般公開されています。私はあなたのコンセプトを試してみましたが、まったく動作しませんでした。誰もがグローバルなJSONオブジェクトを書き直すより良い方法を知っていますか?ああ、これについて十分な研究努力をしていないと思ってくれた人のおかげです... Booooo ... – Paul

+0

これについて助けが必要なら、もっと完全なコードを投稿しなければならないと思います。私たちが実際のコードなしで提供できるのは、あなたが挑戦を実装するつもりであると思う文法的なアドバイスです。 – Sinetheta

関連する問題