Laravel 中的 Ajax 请求返回一个空对象
Posted
技术标签:
【中文标题】Laravel 中的 Ajax 请求返回一个空对象【英文标题】:Ajax request in Laravel returns an empty object 【发布时间】:2015-07-22 17:59:01 【问题描述】:我使用Laravel & jQuery
将insert
数据写入mysql
表并取回新行的新ID。问题是我得到一个空对象作为响应。我也试过print_r
我的控制器中的结果,但我得到了一个巨大的数组。
这是一些代码。
jQuery :
$.ajax(
url: "locations/new",
type: "get", //send it through get method
data:name:name,description:description,
success: function(response)
$data = $(response);
console.log($data);
,
error: function()
console.log("Unable add")
);
控制器:
$name= Input::has('name') ? Input::get('name') : null;
$description= Input::has('description') ? Input::get('description') : null;
$add = Location::add($name, $description);
return $add;
和我的模特:
public static function add($name,$description)
$location_id = DB::table('locations')->insertGetId(
array('name' => $name, 'description' => $description)
);
Self::get($location_id);
public static function get($location_id)
$result = DB::table('locations')->where('location_id',$location_id)
->select(DB::raw('location_id,name'));
$result->get();
return $result;
我知道我在这里可能有一个错误。请除了你的答案,我想知道错误的原因。
提前谢谢..
【问题讨论】:
试试console.log(response);
看看会发生什么
我得到(一个空字符串)
只是扔在空中,也许我错了,但不应该是return Self::get($location_id);
吗?
@OfirBaruch 我试过了,我得到“无法转换为字符串”错误
这很奇怪。让我们尝试破解此代码以对其进行调试。撤消我的建议并在return $result
之前添加var_dump($result)
。输出是什么?
【参考方案1】:
在共同调查 (@chat) 之后,问题似乎出在查询构建器中。
添加var_dump($result)
后,输出为:
Error: Syntax error, unrecognized expression: object(Illuminate\Database\Query\Builder)#248 (27) ["connection":prot
我建议删除 DB::raw
函数,因为您可以将字段传递给 select
函数,并且出于方便的原因将 ->get() 函数附加到同一行。所以最终的查询构建器代码将是:
$result = DB::table('locations')->where('location_id',$location_id)->select('location_id','name')->get();
这解决了问题。
更新 - 原因
在深入研究了框架的源代码后,我发现:
/**
* Set the columns to be selected.
*
* @param array $columns
* @return $this
*/
public function select($columns = array('*'))
$this->columns = is_array($columns) ? $columns : func_get_args();
return $this;
所以select
函数需要一个数组或参数为columns
,而当db::raw
正在使用时,它返回的字符串与select
函数的预期参数冲突。
【讨论】:
它可能有效,但您正在重新发明***。请查看我的答案,看看它是否有效。它更干净,并且是“laravel 方式”完成的。【参考方案2】:你的控制器应该是这样的
$location = new Location();
$location->name = Input::get('name', null);
$location->description= Input::get('description', null);
$location->save();
return response()->json(location);
【讨论】:
只有当我更改为return $location;
时它才有效但是我怎样才能获得新行的插入 id?
我犯了一个错误。 return response()->json($location);
也应该很好用,你可能会期待不同的输出。无论如何,我认为这更清晰,更容易理解。 Laravel 很漂亮,应该使用原生方法。根据您的模型和可填充属性的外观,它甚至可以进一步优化。阅读文档。它是你的朋友!以上是关于Laravel 中的 Ajax 请求返回一个空对象的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:为啥我的 ajax 请求返回“500(内部服务器错误)”?