Ответ Ajax от контроллера - PullRequest
       1

Ответ Ajax от контроллера

3 голосов
/ 09 февраля 2011

Мой javascript отправляет Ajax-запрос, который вызывает функцию контроллера, а затем отвечает функции контроллера на Ajax-запрос. Моя проблема в части ответа контроллера.

мой javascript, который отправляет запрос Ajax на контроллер:

var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
          //RENDER RESPONSE @cars here
        }
    }
    xmlhttp.open("GET","/cars/reserved_cars/"+customer_id,true);
    xmlhttp.send();

Итак, вышеприведенный ajax-запрос вызовет мою CarsController функцию reserved_cars с параметром customer_id.

Мой CarsController:

class CarsController < BaseController

def reserved_cars
    customer_id=params[:customer_id]

    @cars = Car.getCars(customer_id)
  end
...


end

Мой контроллер получает все автомобили по запросу. Модель автомобиля с customer_id.

Все работает отлично, я просто не знаю, как вернуть @cars в контроллере в ответ на мой запрос ajax на мой javascript (место в моем javascript, где я комментировал " // RENDER RESPONSE @cars")

Итак, как получить ответ @cars в моем javascript?

Ответы [ 4 ]

8 голосов
/ 09 февраля 2011

Спасибо, ребята, я разобрался с решением.

Сначала я конвертирую @cars в строку cars_str,

, затем использую render :json => cars_str в моем контроллере,

в моем javascript. Я могу получить эту строку cars_str сxmlhttp.responseText

1 голос
/ 09 февраля 2011

Протокол HTTP всегда передает строку, если вы пытаетесь вернуть массив или другую не скалярную переменную, у вас ничего не получится.Решением было бы отформатировать вашу переменную как строку, а затем проанализировать ее в JavaScript.

0 голосов
/ 09 февраля 2011

Эта страница

"/cars/reserved_cars/"+customer_id"

Необходимо вернуть страницу с текстом на ней. Затем к этому тексту можно получить доступ, открыв responseText вашего объекта xmlhttp.

if (xmlhttp.readyState==4 && xmlhttp.status==200){
          //RENDER RESPONSE @cars here
          responseFromCar = xmlhttp.responseText;
   }

Где responseFromCar будет текст, возвращаемый по вашему запросу. Затем просто проанализируйте текст по мере необходимости, чтобы найти необходимую информацию.

Примечание. Вы также можете использовать responseXML вместо responseText, если ожидаете, что правильно отформатированная страница XML вернется из вашего запроса. Такой подход облегчил бы его разбор.

0 голосов
/ 09 февраля 2011

Вам нужно будет написать ajax ответ

class CarsController

def reserved_cars
    customer_id=params[:customer_id]

    @cars = Car.getCars(customer_id)
    respond_to do |format|
      format.js
    end
  end
end

В вашем представлении автомобилей вы добавите reserved_cars.js.rjs, который содержитJavaScript.Этот файл содержит ваш код JavaScript, например:

page.replace_html :cars, :partial => '/cars/car', :collection => @cars

replace_html заменит внутренний html элемента DOM на id cars (например, <div id="cars"></div>).частичные дисплеи 1 машина

надеюсь это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...