Я работаю над формой, в которой есть два выпадающих списка: Запрос на обслуживание и местоположения. Всякий раз, когда пользователь выбирает услугу, выпадающий список местоположений должен быть заполнен теми местами, которые были выбраны для этой службы. У меня есть модель администратора для обслуживания и местоположения, и вот один для службы, чтобы показать, как я сопоставляюсь Местам модели данные к нему:SilverStripe - Передача данных с контроллера на html-форму через jQuery.ajax
<?php
class Service extends DataObject {
private static $db = array(
'Name' => 'varchar',
);
private static $belongs_many_many = array(
'Locations' => 'Location'
);
public static $summary_fields = array(
'Name' => 'Title',
);
private static $field_labels = array(
'Name'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
if ($this->ID) {
$fields->addFieldToTab('Root.Locations', CheckboxSetField::create(
'Locations',
'Locations',
Location::get()->filter(array(
'AcceptingAppointments' => '1'
))->map()
));
}
return $fields;
}
}
Это JQuery связан с выпадающим меню для запрошенной услуги, за которым следует функция Ajax, которая проходит идентификатор на сервер:
SchService.change(function() {
if (SchService.val() != "" && SchService.val() != null) {
SchLocation.prop('disabled', false);
sendServiceId();
} else {
SchLocation.prop('disabled', true);
}
});
function sendServiceId(){
var service_data = {
serviceid: SchService.find('option:selected').attr('id')
};
$.ajax({
type: "POST",
url: "/home/getLocationsByService",
data: service_data
}).done(function (response) {
console.log(response);
});
}
И, наконец, функция для getLocationsByService, который использует идентификатор услуги из вызова Ajax для получения места для этой службы:
public function getLocationsByService(){
$serviceid = $this->getRequest()->getVar('serviceid');
$service = Service::get()->byId($serviceid);
$locations = Service::Locations();
foreach ($locations as $location){
return json_encode($locations);//not sure if this will be needed
}
}
Теперь я запутался в том, как анализировать данные местоположения, полученные способом, который может быть возвращен в форму для использования в поле выпадающего списка «Местоположения». Я предполагаю, что Джон может понадобиться, но это насколько я понял.
1. Я думаю, что ajax должен иметь параметр «success», в котором будут обрабатываться возвращаемые данные. Кроме того, когда у вас есть цикл foreach и «return» в нем, цикл будет длиться всего 1 оборот, он не будет повторяться, поскольку вы нарушаете его с помощью «return», я бы посоветовал вернуть весь массив ($ location) и обрабатывать его с помощью JS в функции успеха AJAX :) – Marius