2014-12-07 19 views
7

I Kommentar mit AJAX-Technologie hinzufügen bin versucht, aber ich habe einen Fehler: Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error) Hier ist mein Code: Ausblick:AJAX Form Laravel Senden

{{ Form::open(array('method'=>'post','class'=> 'col-md-6','url' => '/comment/add', 'id'=>'comment')) }} 
         <input type="hidden" name="post_id" value="{{$id}}"> 
         <div class="row"> 
          <div class="inner col-xs-12 col-sm-12 col-md-11 form-group"> 
           {{Form::label('name', 'Imię')}} 
           {{Form::text('username', null, array('class'=>'form-control', 'id'=>'name', 'name'=>'name'))}} 
          </div> 
          <div class="inner col-xs-12 col-sm-12 col-md-12 form-group"> 
           {{Form::label('message', 'Wiadomość')}} 
           {{Form::textarea('message', null, array('class'=>'form-control', 'id'=>'message', 'name'=>'message', 'rows'=>'5'))}} 
          </div> 
         </div> 
         <div class="row"> 
          <div class="col-xs-12 col-md-12 submit form-group"> 
           {{Form::submit('Wyślij', array('name'=>'submit', 'class'=>'btn btn-orange'))}} 
          </div> 
         </div> 

        {{ Form::close() }} 

Controller:

public function addComment() 
{ 
     $this->layout = null; 
     //check if its our form 
     if(Request::ajax()){ 
      $name = Input::get('name'); 
      $content = Input::get('message'); 

      $comment = new Comment(); 
      $comment->author = $name; 
      $comment->comment_content = $content; 
      $comment->save(); 

      $postComment = new CommentPost(); 
      $postComment->post_id = Input::get('post_id'); 
      $postComment->comment_id = Comment::max('id'); 
      $postComment->save(); 

      $response = array(
       'status' => 'success', 
       'msg' => 'Setting created successfully', 
      ); 
      return 'yea'; 
     }else{ 
      return 'no'; 
     } 
} 

AJAX:

jQuery(document).ready(function($) { 

    $('#comment').on('submit', function(e) { 
     e.preventDefault(); 

     var name = $(this).find('input[name=name]').val(); 

     $.ajax({ 
      type: "POST", 
      url: host+'/comment/add', 
     }).done(function(msg) { 
      alert(msg); 
     }); 

    }); 
}); 

A nd die letzten Routen:

Route::post('comment/add', '[email protected]'); 

Jeder hat eine Idee, wo ist das Problem und warum kann ich nicht mein Formular einreichen?

+0

Wert des Hosts in Javascript? –

+0

' 'so hat es' http: // localhost: 8888/blog/public' – Zobo

+0

Ein 500-Fehler bedeutet, dass es wahrscheinlich eine nützliche Fehlermeldung in Ihrem Laravel-Protokoll ist. Überprüfen Sie dort. – ceejayoz

Antwort

12

Sie sind keine Daten veröffentlichen,

$.ajax({ 
     type: "POST", 
     url: host+'/comment/add', 
    }).done(function(msg) { 
     alert(msg); 
    }); 

Der Fehler, den Sie bekommen, ist, dass die Spalten in DB nicht null sein kann.

$.ajax({ 
     type: "POST", 
     url: host+'/comment/add', 
     data: { name:name, message:message, post_id:postid }, 
     success: function(msg) { 
      alert(msg); 
     } 
    }); 

Ändern Sie diese

var name = $(this).find('input[name=name]').val(); 

zu

var name = $('#name').val(); 

und die Nachricht und die Post-ID holen:

Versuchen Sie, Ihre Ajax-Aufruf zu, dies zu ändern

var message = $('#message').val(); 
var postid = $('#post_id').val(); 

kompletter Ajax-Block:

$('#comment').on('submit', function(e) { 
     e.preventDefault(); 
     var name = $('#name').val(); 
     var message = $('#message').val(); 
     var postid = $('#post_id').val(); 
     $.ajax({ 
      type: "POST", 
      url: host+'/comment/add', 
      data: {name:name, message:message, post_id:postid} 
      success: function(msg) { 
       alert(msg); 
      } 
     }); 
    }); 

Und schließlich, eine ID zu dem verborgenen Feld hinzufügen:

<input type="hidden" name="post_id" id="post_id" value="{{$id}}"> 

Daten senden zurück von Laravel Controller, z. B.

Dies wird die Daten in Ihrer Antwort zurück zu Ihrer Ajax Anfrage senden.

Dann ändern Sie Ihre Ajax-Erfolg Funktion:

// ....... 
success: function(msg) { 
    $("body").append("<div>"+msg+"</div>"); 
} 

// .......... 

Sie jetzt sehen, dass ein neues div in Ihrem <body> einschließlich der erzeugten Antwort erstellt wurde. Wenn Sie den neu erstellten Post anzeigen möchten, erstellen Sie ihn einfach als Ajax-Antwort und hängen Sie ihn an ein beliebiges Element auf Ihrer Seite an.

+0

hinzufügen Es funktioniert, ich habe keine Fehler, aber ich muss die Seite aktualisieren, um einen neuen Kommentar zu sehen. Weißt du, warum? – Zobo

+1

Da Sie nur Daten an den Controller übergeben, müssen Sie den neuen Kommentar direkt an Ihre AJAX-Anfrage senden, ihn in der Erfolgsfunktion abfangen und ausgeben. Ich werde meinen Beitrag mit einem kleinen Beispiel bearbeiten, ich bin mir sicher, dass du es damit herausfinden wirst, gib mir eine Sekunde. @ Zobo. Bitte akzeptieren Sie die Antwort, wenn es Ihnen geholfen hat – baao

+0

Ich habe es bearbeitet. @ Zobo versuchen, wenn Sie Erfolg haben, wenn nicht zögern, wieder zu fragen! – baao

8

Ändern Sie nur den Ajax-Block von baao's answer. Sie können Daten serialisiert übergeben.

$('#comment').on('submit', function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: host+'/comment/add', 
     data: $(this).serialize(), 
     success: function(msg) { 
     alert(msg); 
     } 
    }); 
}); 

Alle Feldwerte des Formulars kann mit der serialize() Funktion übergeben werden.

+0

Sie haben wirklich meinen Tag gerettet –