2013-11-13 2 views
1

Я пытаюсь сделать вызов ajax контроллеру, который inturn вызывает метод из модели и возвращает мне массив значений. Но я не могу получить ответ в ajax. Мне нужно установить значение текстового поля в зависимости от данных ответа.Ответ Ajax и json

Мой Аякса код написан в .coffee.js:

$.ajax({ 
     url: '/addresses/billing_address_to_string', 
     type: "POST" 
     dataType: "JSON" 
     success: (data) -> 
      $('#billing_address_address_line1').val(data) 
     }).done 

В мой контроллер:

respond_to :json, only: [:billing_address_to_string] 
def billing_address_to_string 
    address = Address.last.billing_address_to_string1 
    respond_with address 
    end 

Метод Модель:

def billing_address_to_string1 
    address = [] 
    address << [name, street, street_qualifier].reject(&:blank?) 
    address << [city, state_or_region, postal_code].reject(&:blank?) 
    address << [phone_number] 
    end 

Любая помощь будет много оценивается :)

+1

Получил любую информацию из вашей консоли вкладки/сетей в инструментах для разработчиков? –

+1

какая ошибка вы получаете? –

+0

@ Рик в моей сетевой вкладке Я получаю статус 302. Консоль не имеет ошибок – Rads

ответ

1

Address.last.billing_address_to_string1 возвращает строку? Если это так, вам нужно обернуть его в хэш, чтобы JSON закодировал его.

Попробуйте

respond_with({:address => address}) 

Тогда JS должен быть

$.ajax({ 
    url: '/addresses/billing_address_to_string', 
    type: "POST" 
    dataType: "JSON" 
    success: (data) -> 
     $('#billing_address_address_line1').val(data.address) 
    }) 
+0

Я внес изменения, но не повезло :( – Rads

+1

Вы используете хром? На вкладке сети вы можете посмотреть ответ на запрос ajax. Убедитесь, что ответ дает вам то, что вы ожидаете. – Slicedpan

+0

Я сделал очень глупую ошибку, спешил, я просто забыл добавить маршрут для своего метода. После того, как я добавил маршрут, я внес изменения, упомянутые выше. Он отлично работает теперь :) Большое спасибо за вашу помощь. – Rads

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