2014-10-26 30 views
2

我一直在掙扎了一會兒,我檢查了所有我能想到的,我敢肯定,這應該工作..但事實並非如此。 這個想法很簡單 - 你有一個類型爲「text」的表單輸入。當你在輸入中輸入一個數字並點擊「Click me!」時,它應該將數據以JSON格式發佈到Route(通過Closure處理),然後檢查輸入是否是JSON格式,如果是,數據庫請求,然後返回數據。POST-ING JSON到Laravel 4使用jQuery

這是我的看法(table.blade.php

<html> 
    <head> 
     <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script> 
     <title>json test</title> 
    </head> 
    <body> 
     <form action="#"> 
      <input type="text" name="articleID" id="articleid" placeholder="Enter article id" value=""/> 
     </form> 
     <a href="#" id="trigger">Click me!</a> 
     <script> 
     $(document).ready(function(){ 
      var a_id = $("#articleid").val(); 
      var article = { id: a_id }; 
      $("#trigger").click(function(){ 
       console.log(article); 
       $.ajax({ 
        type: "POST", 
        url: "/json", 
        data: article, 
        dataType: 'json', 
        success: function(data){ 
         alert(data.title); 
        } 
       }); 
      return false; 
      }); 
     }); 
     </script> 
    </body> 
</html> 

而且我routes.php文件

Route::get('json',function(){ 
    return View::make('table'); 
}); 
Route::post('json',function(){ 
    if (Input::isJson()) 
    { 
     $request = Input::all(); 
     $article = Article::find($request['id']); 
     if (!is_null($article)) 
     { 
      return Response::json($article); 
     } 
     else return Response::json(['error' => "Object not found"],404); 
    } 
    else return "not json"; 
}); 

我有兩個問題:

  • console.log(article);打印Object { id=""}所以JS似乎 不拿起的input
  • 無論什麼價值,我總是收到響應"not json",即使我在Ajax調用

的東西代替data: articledata: {id: 123} UPDATE 由於milz,第一個問題是現在固定,我重構了$(document).ready()功能,像這樣:

   $("#trigger").click(function(){ 
        var a_id = $("#articleid").val(); 
        var article = { id: a_id }; 
        console.log(article); 
        $.ajax({ 
         type: "POST", 
         url: "/json", 
         data: article, 
         dataType: 'json', 
         success: function(data){ 
          alert(data.title); 
         } 
        }); 
       return false; 
       }); 

現在的O bject被正確設置,但後端仍然只返回「不json」... 我不知道我在做什麼錯在這裏,我將不勝感激任何幫助!提前致謝!

回答

4

Input::isJson()實際上會檢查請求的Content-Type標頭。 dataType所做的唯一的事情就是告訴jQuery期望的迴應。

嘗試設置contentType

$.ajax({ 
    type: "POST", 
    url: "/json", 
    data: article, 
    dataType: 'json', 
    contentType: 'application/json', 
    success: function(data){ 
     alert(data.title); 
    } 
}); 
+0

這個工作,非常感謝! – 2014-11-13 09:24:19

+0

不客氣:) – lukasgeiter 2014-11-13 09:25:27