0

現在、jRails を介してアプリケーションで AJAX を使用しようとしています。コントローラーから JSON オブジェクトを返して、Javascript で解析しようとしています。json2.js を使用して解析を行っています。

ここに私が現在持っているコードがあります:

function getSomething()
{
    $.ajax({
        type: "GET",
        url: "map/testjson",
        success: function(data) {
            var myData = JSON.parse(data[0]);
            window.alert(myData.login);
        }
    });
}

そしてコントローラーで:

class Map::MapController < ApplicationController
  def index
  end

  def testjson
    @message = User.find(:all)
    ActiveRecord::Base.include_root_in_json = false
    respond_to do |w|
      w.json { render :json => @message.to_json }
    end

  end
end

window.alert は単に「未定義」(目盛りなし)と言っています。

ただし、javascript を window.alert(data) (コントローラーによって返される生のオブジェクト) に変更すると、次のようになります。

[{"salt":"aSalt","name":"", "created_at":"2010-03-15T02:34:25Z","re​​member_token_expires_at": null,"crypted_pa​​ssword":"aPassword", "updated_at" :"2010-03-15T02:34:25Z","id":1,"remember_token":null, "login":"zgwrig2","email":"zach@zach.com"}]

正しく見れば、これはサイズ 1 の配列のように見えますが、考えられるデータ オブジェクトで JSON.parse のほぼすべての組み合わせを試しましたが、何も機能していないようです。

ここで私が間違っていることについてのアイデアはありますか?

編集 Users テーブルに複数の行がある場合、これはうまくいくようです。

4

2 に答える 2

0

コードに 2 つの問題があることがわかります。

$.getJSON を使用して JSON リクエストを実行するとよいでしょう。

  1. jQuery はまだ JSON のパーサーです... コールバック関数で行う必要があるのは次のとおりです。

$(data).each(function(i, user){ // ユーザーに対して何をしたいか });

  1. あなたのレールの応答にはエラーがあります.w.json { render :json => @message.to_json }ではなく、w.json { render :json => @message }のみです。「.to_json」なし。

それが役立つことを願っています。

于 2010-03-16T08:32:10.263 に答える
0

複数の行がある場合、json オブジェクト表現ではなく、json 形式のオブジェクトの文字列が処理されます。英語で申し訳ありませんが、もっと詳しく説明してください...

また、@message が null オブジェクトの場合、messange がないため、json へのレンダリングは何も行わず、JS にいるときは、ワーカーに対する応答がないため、問題が発生します。@message オブジェクトを確認する必要があります。多分あなたはそれを行うことができます:

w.json {render :json => (@message.nil?) ? 0 : @チェックポイント }

次に、コールバック関数で、データ応答が「0」(文字列など) か 1 つのオブジェクトかを確認する必要があります。

于 2010-03-22T10:54:45.353 に答える