Использование JSON с jRails - PullRequest
0 голосов
/ 16 марта 2010

В настоящее время я пытаюсь использовать AJAX в своем приложении через jRails. Я пытаюсь вернуть объект 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) (необработанный объект, возвращаемый контроллером), я получу:

[{ "соль": "aSalt", "имя": "", "Created_at": "2010-03-15T02: 34: 25Z", "remember_token_expires_at": нуль "crypted_password": "aPassword", "Updated_at": "2010-03-15T02: 34: 25Z", "идентификатор": 1, "remember_token": нулевой, "Войти": "zgwrig2", "электронная почта": "zach@zach.com"}]

Это выглядит как массив размера 1, если я смотрю на него правильно, но я попробовал почти каждую комбинацию JSON.parse для объекта данных, о котором я могу думать, и, похоже, ничего не работает.

Есть идеи, что я здесь делаю не так?

EDIT Кажется, это работает нормально, если в таблице Users несколько строк.

Ответы [ 2 ]

0 голосов
/ 22 марта 2010

Если имеется более одной строки, вы имеете дело со строкой вашего объекта в формате json, а не с представлением объекта json. Мне очень жаль, английский, я хочу объяснить лучше ...

И если @message является нулевым объектом, потому что нет никакого сообщения, рендеринг в json ничего не делает, и когда вы находитесь в JS, у вас возникнет проблема, потому что у вас нет никакого ответа, какой работник. Вы должны проверить свой объект @message. Может быть, вы можете сделать это:

w.json {render: json => (@ message.nil?)? 0: @checkpoint}

затем в функции обратного вызова вы должны проверить, равен ли ваш ответ с данными "0" (например, строка) или один объект.

0 голосов
/ 16 марта 2010

Я вижу, что у вас есть 2 проблемы в вашем коде.

Лучше использовать $ .getJSON для выполнения запроса JSON.

  1. jQuery все еще является синтаксическим анализатором JSON ... тогда в функции обратного вызова вы должны только сделать:

$ (data) .each (function (i, user) { // что вам нравится делать с пользователем });

  1. В вашем ответе rails есть ошибка, это не w.json {render: json => @ message.to_json}, это только w.json {render: json => @message}. Без ".to_json".

Надеюсь, это поможет.

...