2014-10-26 65 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