2016-10-16 1 views
0

У меня есть Входящие с внутренними сообщениями от моих клиентов. Когда я нажимаю на списке по имени я запрашивающий с помощью JQuery $.ajax так:Лучший способ переноса данных на MVC с помощью jQuery?

$.ajax({ 
     url: 'messages/retrieve/' + client_id, 
    }).done(function(data) { 

     $('.messages-dialog').html(data); 

    }); 

Мой контроллер должен возвращать переменную с данными JSON? Я понимаю, что это должно сбрасывать его на вид, и я должен рассматривать его там, но как это сделать, если клиентская сторона?

Я не знаю, лучше ли обрабатывать и создавать структуру html в контроллере, а не просто загружать его в .messages-dialog с помощью jQuery.html();

Жаль, что я немного потерял эту проблему.

+0

Лучшей практикой было бы заставить ваш контроллер вернуть json, содержащий все данные, а затем из jquery вы просто разбираете данные и обрабатываете создание представления с помощью javascript – Cristian

+0

@Cristian, почему это «лучшая практика»? Какой-нибудь заслуживающий доверия источник? – Dekel

+0

хорошо подумайте о том, что в любое время, когда вы хотите изменить способ отображения ваших данных, вам не нужно прикасаться к серверному коду, достаточно обрабатывать по-разному данные в сценарии jquery. – Cristian

ответ

0

Вы можете использовать метод jQuery.ajax(), как в приведенном выше примере. Также см. Официальную документацию с примерами http://api.jquery.com/jquery.ajax/.

Кроме того, вы можете использовать методы jQuery.get() и jQuery.post() в зависимости от того, как и что вы будете отправлять. Вы можете использовать эти методы, как показано ниже:

var url = 'messages/retrieve/' + client_id; 
$.post(// for example 
    url, 
    function(data) { 
     $('.messages-dialog').html(data); 
    }); 

Смотрите официальную документацию с примерами здесь: http://api.jquery.com/get/, http://api.jquery.com/jQuery.post/.

обработчик сервера должен быть как ниже:

use JsonResponse; // you must specify the exact component (I use this) 

/** 
* Change message in dialog // for example 
*/ 
public function changeDialogMessageAction(Request $request) { 
    // request data processing 

    $response = new JsonResponse(); 
    $response->setData(array(
     // new data for returning to client 
    )); 

    return $response; // your data, which will be handled in callback 
} 

Вы не должны создавать HTML-структуру в контроллере. Это плохой стиль! JavaScript имеет асинхронную модель событий, и вы должны ее использовать. Контроллер должен обрабатывать/преобразовывать данные, которые были переданы вами, а затем возвращаться обратно. Обратный вызов jQuery должен вставлять полученные обработанные/преобразованные данные в DOM.

+0

где аргумент данных? Почему сообщение? Почему бы не упомянуть '$ .getJson'? – charlietfl

+0

1) Какой аргумент? Как узнать контекст своей задачи? 2) Читайте внимательно: // например, 3) В его вопросе нет ни слова о JSON !!! –

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