我一直在努力解决这个问题,我检查了我能想到的一切,我确信 应该 工作..但它没有。 这个想法很简单 - 你有一个“text”类型的表单输入。当您在输入中键入数字并单击“Click me!”时,它应该将JSON格式的数据发布到Route(通过Closure处理),然后检查输入是否为JSON格式,如果是,则创建一个数据库请求,然后返回数据。
以下是我的观点( 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: article
替换data: {id: 123}
更新
感谢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;
});
现在对象已正确设置,但后端仍然只返回“not json”... 我不知道我在这里做错了什么,我将不胜感激任何帮助!提前谢谢!
答案 0 :(得分: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);
}
});