2014-12-05 18 views
0

我試圖從bootstrap模式中使用Laravel中的Ajax存儲數據。這裏是我的代碼:通過Laravel中的Ajax存儲數據失敗

route.php

Route::get('/repository/', '[email protected]'); 
Route::post('/repository/', '[email protected]'); 

現在 repository.index

@section('popups') 
<!-- Modal --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
     <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
     </div> 
     <div class="modal-body"> 

      <div class="row row-bg"> 
       <div class="col-md-12"> 
        <input type="text" class="text-field" style="width:100%; margin-bottom: 10px;" id="name" name="name" placeholder="URL name*: "> 
        {{$errors->first('name','<span class="error_message postShake"><i class="fa mr fa-exclamation-triangle"></i> Please enter the name</span>')}} 
       </div> 
       <div class="col-md-12"> 
        <input type="text" class="text-field" style="width:100%; margin-bottom: 10px;" id="url" name="url" placeholder="Enter the URL*: "> 
       </div> 
       <div class="col-md-12"> 
        <textarea class="text-field" style="width:100%; margin-bottom: 10px;" id="description" name="description" placeholder="Enter the URL*: "></textarea> 
       </div> 
      </div> 

     </div> 
     <div class="modal-footer"> 
     <button type="submit" class="whiteButton" data-dismiss="modal">Close</button> 
     <button type="button" id="add" name="add" class="blueButton">Save changes</button> 
     </div> 
    </div> 
    </div> 
</div> 


<script> 
    $(document).ready(function(){ 
     $('#add').click(function(e){ 
      e.preventDefault(); 
      var name=$(this).find('input[name=name]').val(); 

      //post Ajax 
      $.post('/repository', 
      { 
       "name": $(this).find('input[name=name]').val(), 
       "url": $(this).find('input[name=url]').val(), 
       "description": $(this).find('input[name=description]').val() 
      }, function(data){ 
       // console.log(data); 
      }, 'json'); 
     }); 
    }); 
</script> 
@stop 

而在RepositoryController.php

<?php 

class RepositoryController extends BaseController{ 

    public function index(){ 
     return View::make('repository.index'); 
    } 


    public function store(){ 

     $validation=Validator::make(Input::all(), Link::$rules); 

     if($validation->fails()){ 
      return Redirect::back()->withInput()->withErrors($validation->messages()); 
     } 
     $link = new Link; 

     $link->name=Input::get('name'); 
     $link->url=Input::get('url'); 
     $link->description=Input::get('description'); 

     $link->save(); 
     return Redirect::route('repository.index'); 
    } 


} 

Link.php模型

<?php 

class Link extends Eloquent{ 

    public static $rule= ['name'=>'reuiqred', 
          'url'=>'required', 
          'description'=>'required']; 

} 

在控制檯,它給了我一個錯誤:Failed to load resource: the server responded with a status of 500 (Internal Server Error)

可能是什麼問題?此外,驗證錯誤消息也不會出現在模式中。

+1

AJAX和重定向,將不作於第一手任何意義。 – itachi 2014-12-05 05:32:07

+0

我如何使這個代碼工作?我正在學習Laravel – user1012181 2014-12-05 05:33:25

+0

而不是重定向的Ajax,你應該使用'Response :: json()' – 2014-12-05 05:47:18

回答

0

具有以下

$('#add').click(function() { 
name = document.getElementById('name').value; 
url = document.getElementById('url').value; 
description = document.getElementById('description').value; 
$.post('/repository', {'name': name, 'url': url, 'description': description}, function(data) { 

    var parsed = JSON.parse(data); 

    var html = 'content echoed in your post function goes here'; 

    $('#requestStatus').append(html); 
}).success(function() { 
    $('#comment').val(''); 
    $('#sentSuccess').html('Something happened!').show().delay(5000).fadeOut(); 
}).fail(function() { 
    $('#sentFailed').html('Nothing happened').show().delay(5000).fadeOut(); 
}); 
}); 

和信件功能

public function store(){ 

$name = Input::get('name'); 
$url = Input::get('url'); 
$description = Input('description'); 

$data = array('name' => $name , 'url' => $url); 
    $validation=Validator::make($data, Link::rules()); 

    if($validation->fails()){ 
     return Redirect::back()->withInput()->withErrors($validation); 
    } 
    $link = new Link; 

    $link->name= $name; 
    $link->url= $url; 
    $link->description= $description; 
    $link->save(); 
//now to return a message 
    echo json_encode(array('name' => $name, 'url' => $url, 'description' => $description); 
} 

改變你的JSON和你的鏈接應該是

<?php 
class Link extends Eloquent{ 
public $table = 'table_name'; 

public static function rule() 
{ 
$rule= ['name'=>'reuiqred', 
         'url'=>'required', 
         'description'=>'required']; 
return $rule; 
} 
} 
+0

我仍然有同樣的問題:'加載資源失敗:服務器響應的狀態爲500(內部服務器錯誤) ' – user1012181 2014-12-05 15:33:34

+0

修復了post函數的代碼請看看而不是重定向嘗試發回數據(我做過) – 2014-12-05 16:32:08

+0

還是一樣的錯誤! – user1012181 2014-12-05 16:36:21

0

修復你的路由

喜歡的東西即:

Route::get('/repository/index', '[email protected]'); 
Route::post('/repository/store', '[email protected]'); 

還修復你的js。

$.post('/repository', 
     { 
      "name": $('#name').val(), 
      "url": $('#url').val(), 
      "description": $('#descsription').val() 
     }, function(data){ 
      // console.log(data); 
     }, 'json'); 

您的ID,而不是名稱ATTRS

和修復你的控制器

return Renurn::json($link);