#javascript #php #jquery #ajax #symfony
#javascript #php #jquery #ajax #symfony
Вопрос:
Сегодня была тяжелая ночь и утро, хахаха. Я пытаюсь получить некоторые data
symfony2
из AJAX
'POST'
петиции.
На самом деле я хочу отправить массив и получить его в контроллере, но я получаю сообщение об ошибке, подобное этой переменной null
. Я думаю, что я пытаюсь сделать это правильно, но… Давайте посмотрим!
Это петиция JS AJAX, я получаю запрос ul#sortable.children(), чтобы обновить его в базе данных, поэтому я отправил массив с позицией и идентификатором.
пример: [«1», «3», «2»]. Таким образом, объект с id = 1 в БД будет находиться в позиции 1. Элемент с id = 3 будет находиться в позиции 2, а элемент с id = 2 будет находиться в позиции 3.
$('#ordenar').click(function(){
var $children = $('#sortable').children();
var numElementos = $children.length;
var socialSorted = [];
for(var i=0; i<numElementos; i ){
socialSorted.push($children[i].id);
}
$.ajax({
url: ' {{ path('admin_update_social_position') }} ',
datos: socialSorted,
method: 'POST'
}).done(function (data) {
if(data.type == 'OK'){
window.location.reload();
}
if(data.type == 'ERROR'){
$('#error-message').slideDown();
}
});
});
А вот и контроллер
/**
* @Route("/admin/update/order/social", name="admin_update_social_position")
*/
public function orderSocial(Request $request)
{
$em = $this->getDoctrine()->getManager();
$socialSorted = $request->request->get('socialSorted');
$numElementos = count($socialSorted);
for($i=0; $i<$numElementos; $i )
{
$social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
$social->setPosition($i 1);
$em->persist($social);
}
if (empty($socialSorted)) {
$this->sendResponseStatus('ERROR');
return new JSONResponse($this->getData());
}
$em->flush();
$this->sendResponseStatus('OK');
// Generamos los datos para la respuesta ajax
return new JSONResponse($this->getData());
}
Я пробовал много способов… отправка массива, отправка a JSON
с массивом в, а также различные способы получения данных из controller
… любой совет / решение?
Спасибо всем вам
РЕДАКТИРОВАТЬ: ошибка была в строках
$social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
$social->setPosition($i 1);
$em->persist($social);
Потому что после findBy он возвращает вас и ArrayCollection, а затем я должен сделать:
$social = $em->getRepository('AppBundle:Social')->findById($socialSorted[$i]);
$social[0]->setPosition($i 1);
$em->persist($social[0]);
Комментарии:
1.
datos: socialSorted,
… datos? … Разве это не должно бытьdata: socialSorted,
? Тот факт, что вы получаетеnull
, указывает на то, что параметр отправляется неправильно. Symfonysrequest->get()
возвращаетnull
, если параметр не существует.2. Извините, поправьте меня, если я ошибаюсь. В ajax вы написали
datos
вместоdata
, а также отправляете данные с ключевым именем. Вот такdata: { 'socialSorted' : socialSorted},
3. Согласен! Да! Какая огромная ошибка.. хахах спасибо всем! Сейчас я получаю внутреннюю ошибку, но я посмотрю на контроллер!! @KinshukLahiri
4. @KinshukLahiri в любом случае, я исправил это, но у меня все еще есть ошибка в контроллере.. эта строка: $socialSorted = $request-> request-> get(‘socialSorted’); не дает мне данные … потому что я печатаю его и его значение null:/ Вы знаете, почему?
5. @VictorRiberoGuasch У вас есть какие-либо данные?
Ответ №1:
Попробуйте это:
$.ajax({
url: ' {{ path('admin_update_social_position') }} ',
data: {
socialSorted: socialSorted,
},
method: 'POST'
}).done(function (data) {
if(data.type == 'OK'){
window.location.reload();
}
if(data.type == 'ERROR'){
$('#error-message').slideDown();
}
});
Вам необходимо отправить данные в виде массива. Вы запрашиваете socialSorted
ключ в запросе, но на самом деле вы его не отправляете
Комментарии:
1. в любом случае, я исправил это, но у меня все еще есть ошибка в контроллере.. эта строка: $socialSorted = $request-> request-> get(‘socialSorted’); не дает мне данные … потому что я печатаю его и его значение null:/ Вы знаете, почему?
Ответ №2:
Проблема здесь заключается в том, что вы ожидаете socialSorted
переменную от AJAX, но никогда не получаете ее:
В контроллере: $socialSorted = $request->get('socialSorted');
Но в вызове AJAX.. datos: socialSorted,
В вашем контроллере просто сделайте его прочитанным… $socialSorted = $request->get('datos');
или измените вызов AJAX на socialSorted: socialSorted