2011-02-09 3 views
2

Мой javascript-запрос Ajax-запроса, который вызовет функцию контроллера, затем ответ функции контроллера на запрос 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 будет вызывать мою reserved_cars функцию CarsController «ы с 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, где я комментировал "// ТОНИРОВАТЬ RESPONSE @cars здесь ")

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

ответ

7

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

Я сначала преобразовать @cars в строку cars_str,

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

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

+1

более конкретные фрагменты кода и в каких файлах они будут полезны :) – andrewcockerham

+0

man i love you - 'render json: {" name "=> username}' работал для меня – ImranNaqvi

0

Вам нужно будет написать AJAX response

класс CarsController < BaseController

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. Этот файл содержит ваш код яваскрипта как:

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

replace_html заменит внутренний HTML элемента DOM с идентификатором cars (например <div id="cars"></div>.). частичные дисплеи 1 автомобиль

Я надеюсь, что это помогает

+0

К сожалению, я не получаю вас. Что это за формат .js ?? если я хочу получить @cars в своем javascript, где я прокомментировал «// RENDER RESPONSE @cars здесь», как это сделать? – Mellon

+0

На самом деле, я не показываю автомобили на мой взгляд, мне просто нужны @cars в моем javascript. Итак, мой вопрос заключается в том, как получить @cars в моем javascript-файле, где я прокомментировал «// RENDER RESPONSE @cars here» – Mellon

+0

Вы хотите иметь только данные? Затем вам нужно преобразовать @cars в json. Вы должны прочитать http://stackoverflow.com/questions/4883918/access-ruby-array-in-javascript/4884054#4884054 – Tarscher

1

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

+0

Я могу форматировать @cars в строке в моем контроллере, но как я могу получить строку в своем javascript ??? – Mellon

0

Эта страница

"/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

Хорошо, дело в том, что я не хочу иметь дополнительную страницу. Я хотел бы использовать javascript для доступа к серверу для получения данных из базы данных, тогда мой javascript может использовать возвращенные данные из базы данных. Вот почему я использую вызов Ajax, есть ли у вас другой способ реализовать, если я не хочу использовать страницу для ответа сервера? – Mellon

+0

Вы возвращаете значение кода, это значение должно быть каким-то образом возвращено. Вы не должны смотреть на него так сильно, как возвращать «страницу», а скорее возвращать ответ на ваш запрос. Ответ может быть таким же простым, как наличие одного слова, возвращаемого функцией. –

Смежные вопросы