2016-10-16 36 views
0

Ich habe einen Posteingang mit internen Nachrichten von meinen Kunden. Wenn ich auf der Liste klicken auf den Namen anfordernden Ich bin mit jQuery $.ajax so:Beste Möglichkeit, Daten auf MVC mit jQuery zu transportieren?

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

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

    }); 

Meine Controller eine Variable mit json Daten zurückgeben sollte? Ich verstehe, dass es auf einer Ansicht ablegen sollte und ich sollte es dort behandeln, aber wie man es macht, wenn es Klientenseite ist?

Ich weiß nicht, ob es besser ist zu behandeln und erstellen Sie die HTML-Struktur in Controller und dann einfach laden Sie es in .Messages-Dialog mit jQuery.html();

Entschuldigung, ich bin ein wenig verloren in diesem Problem.

+0

die beste Praxis wäre, Ihren Controller ein JSON zurückgeben, die alle Daten enthält, dann von JQuery einfach analysieren Sie die Daten und behandeln die Erstellung der Ansicht mit Javascript – Cristian

+0

@Cristian, warum ist das die "Best Practice"? Irgendeine anerkennbare Quelle dafür? – Dekel

+0

Denken Sie darüber nach, dass Sie, wenn Sie die Art und Weise, wie Ihre Daten angezeigt werden, ändern möchten, keinen serverseitigen Code berühren müssen. Es genügt, die Daten im jquery-Skript anders zu behandeln. – Cristian

Antwort

0

Sie können die Methode jQuery.ajax() wie im obigen Beispiel verwenden. Siehe auch die offizielle Dokumentation mit Beispielen http://api.jquery.com/jquery.ajax/.

Außerdem können Sie jQuery.get() und jQuery.post() -Methoden je nachdem, wie und was Sie senden werden. Sie können diese Methoden verwenden, wie unten dargestellt:

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

Siehe offizielle Dokumentation mit Beispielen hier: http://api.jquery.com/get/, http://api.jquery.com/jQuery.post/.

Server-Handler sollte wie wie unten sein:

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 
} 

Sie sollten nicht HTML-Struktur in der Steuerung erstellen. Es ist ein schlechter Stil! JavaScript hat ein asynchrones Ereignismodell und Sie sollten es verwenden. Der Controller muss Daten bearbeiten/transformieren, die von Ihnen übergeben wurden, und dann zurückgeben. jQuery-Callback muss empfangene, gehandhabte/umgewandelte Daten in DOM einbetten.

+0

wo ist das Datenargument? Warum Beitrag? Warum nicht "$ .getJson" erwähnen? – charlietfl

+0

1) Welches Argument? Woher weiß ich den Kontext seiner Aufgabe? 2) Lesen Sie aufmerksam: // zum Beispiel 3) Es gibt kein Wort über JSON in seiner Frage !!! –

Verwandte Themen