2014-12-07 20 views
7

Sto provando ad aggiungere commento utilizzando la tecnologia AJAX, ma ho un errore: Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error) Ecco il mio codice: Vista:Invia modulo laravel utilizzando AJAX

{{ 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 L'ultimo percorsi:

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

Qualcuno ha un'idea di dove è il problema e il motivo per cui non posso inviare il mio modulo?

+0

valore di host in javascript? –

+0

' 'così ha' http: // localhost: 8888/blog/public' – Zobo

+0

Un errore 500 significa che potrebbe esserci un utile messaggio di errore nel log di Laravel. Controlla lì. – ceejayoz

risposta

12

Non stai scrivendo tutti i dati,

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

L'errore che si sta ottenendo è che le colonne in DB non può essere NULL.

tenta di modificare la chiamata AJAX a questo:

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

Modificare questa

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

a

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

e recuperare il messaggio e l'id:

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

completo blocco ajax:

$('#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); 
      } 
     }); 
    }); 

E, infine, aggiungere un ID per il campo nascosto:

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

inviare nuovamente i dati dal regolatore laravel, ad es.

// ........ 

     $response = array(
      'status' => 'success', 
      'msg' => 'Setting created successfully', 
     ); 
     return Response::json($response); // <<<<<<<<< see this line 
    }else{ 
     return 'no'; 
    } 
} 

Questo invierà i dati nella risposta alla richiesta di ajax.

Quindi, modificare la funzione di successo ajax:

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

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

Ora vedrete che una nuova div è stato creato nel vostro <body> tra cui la risposta creato. Se vuoi mostrare il post appena creato, crealo come risposta ajax e aggiungilo a qualsiasi elemento della tua pagina.

+0

Funziona Non ho errori, ma io devo aggiornare la pagina per vedere il nuovo commento. Sai perché? – Zobo

+1

Poiché si passano solo dati al controller, se si desidera visualizzare direttamente il nuovo commento, è necessario inviarlo di nuovo alla richiesta ajax, rilevarlo nella funzione riuscita e inviarlo. Modificherò il mio post con un piccolo esempio, sono sicuro che lo capirai con questo, dammi un secondo. @Zobo. Accetta la risposta se ti ha aiutato – baao

+0

L'ho modificato. @Zobo prova se hai successo, se non ti senti libero di chiedere di nuovo! – baao

8

Basta modificare il blocco Ajax di baao's answer. È possibile passare i dati come serializzati.

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

Tutti i valori dei campi del modulo possono essere passati utilizzando la funzione serialize().

+0

Hai davvero salvato la mia giornata –

Problemi correlati