Вот как я делаю запрос AJAX

  #action
  def get_item
    if request.get?
      binding.pry  #it always stop here, so it's working
      item = Item.where(...)
      unless item
        item = Item.new
        # .....
      end
      respond_to do |format| 
        format.json { render(json: item) } 
      end
    elsif request.post?
       # ......
    end
  end

  #view
     $.ajax({
          type: "GET",
          url: "/contr/get_item",
                data: {key1: "value1"},
                //datatype: "json",
                success: function(data){
                  console.log("ajax success, data -> " + data[0]);
                    }
             });

Хотя код внутри get_item выполняется, значение data на странице всегда равно undefined.

Что я упустил?

Постскриптум Обратите внимание, что запрос отправляется обратно с сервера в json. Я вижу это в Chrome с помощью «инструмента отладки», нажав F12 и перейдя на вкладку Сеть.

0
Alan Coromano 27 Янв 2013 в 08:25

2 ответа

Лучший ответ

Попробуй это:

 def get_item
   if request.get?
     item = Item.where(...)
     unless item
       item = Item.new
       # .....
     end
     render :json => item.to_json
   elsif request.post?
    #...
   end
 end

Посмотреть

   $.ajax({
      type: "GET",
      url: "/contr/get_item",
            data: {key1: "value1"},
            //datatype: "json",
            success: function(data){
              console.log("ajax success, data -> " + data[0]);
                }
         });
1
Community 20 Июн 2020 в 09:12

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

#view
   $.ajax({
        type: "GET",
        url: "/contr/get_item.json",
0
Vincent B. 27 Янв 2013 в 04:35