我在回复对我所做的ajax请求的正确回复时遇到了问题。
基本上,我有一个checkbox
当changed()
触发csrf-token
的ajax被POST method
接受时,数据库上反映的更改成功但错误开始返回"状态"对ajax的过程。
继承我的控制器方法:
public function update(Request $request, $id)
{
$result = ItemPrice::toggleRestockable($id);
return $result;
}
$result
是DB::update() method
无论查询是否成功,ajax都会error:
阻止Internal Server Error 500
阻止。
ajax中responseText
变量的data
主要是:
(1/1) UnexpectedValueException
The Response content must be a string or object implementing __toString(), "boolean" given.
现在我知道我正在返回boolean
或技术上是一个整数,因为它是DB::update()
的结果,它返回受update
影响的行数。
现在我怎样才能正确返回ajax可以理解的响应?
答案 0 :(得分:3)
试试这个
public function update(Request $request, $id)
{
$result = ItemPrice::toggleRestockable($id);
return Response::json(['success' => $result], 200);
}
答案 1 :(得分:3)
创建一个基本ApiController抽象类并在任何控制器中扩展它。所以你不需要为每个函数和每个控制器的成功和错误准备响应obj。你只需要调用函数。这里给出的例子。
// Base ApiController
abstract class ApiController extends Controller
{
/**
* Make standard response with some data
*
* @param object|array $data Data to be send as JSON
* @param int $code optional HTTP response code, default to 200
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithData($data, $code = 200)
{
return Response::json([
'success' => true,
'data' => $data
], $code);
}
/**
* Make standard successful response ['success' => true, 'message' => $message]
*
* @param string $message Success message
* @param int $code HTTP response code, default to 200
* @return \Illuminate\Http\JsonResponse
*/
protected function respondSuccess($message = 'Done!', $code = 200)
{
return Response::json([
'success' => true,
'message' => $message
], $code);
}
/**
* Make standard response with error ['success' => false, 'message' => $message]
*
* @param string $message Error message
* @param int $code HTTP response code, default to 500
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithError($message = 'Server error', $code = 500)
{
return Response::json([
'success' => false,
'message' => $message
], $code);
}
如何使用基类的功能。见这里的例子
public function update(Request $request, $id)
{
try{
$result = ItemPrice::toggleRestockable($id);
return $this->respondWithData($result);
}catch(Exception $e){
return $this->respondWithError($e->getMessage());
}
}
如何将基本控制器扩展到您的控制器
class TestController extends ApiController {}
答案 2 :(得分:2)
JsonResponse是你需要的课程。
return response()->json($result);
使用助手。如果处理集合,请在$ result上使用 - > toArray()。
答案 3 :(得分:1)
return $result;
将返回数据对象,有多种方法可以处理此问题,具体取决于切换函数的返回类型。
处理AJAX请求的典型方法是保存数据并返回状态和消息。
在您的方案中,我可以使用对JSON的响应
public function update(Request $request, $id)
{
$status = 500;
$message = 'An Un expected error Occured';
try {
$result = ItemPrice::toggleRestockable($id);
//assuming toggleRestockable function will return bool
if ($result) {
$status = 200;
$message = 'Successfully Updated';
}
return response()->json(['status' => $status, 'message' => $message]);
} catch (Exception $e) {
return response()->json(['status' => 500, 'message' => $e->getMessage()]);
}
}
这种做法对我来说很好
答案 4 :(得分:0)
public function update(Request $request, $id)
{
$this->validate($request, [
//some of your data =>'required|min:4'; <-your rules
]);
$result = ItemPrice::findOrFail($id);
//something request;
$result->save();
return response()->json(['result'=>$result]);
}
and you can call your error by using this
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
i hope it will helps you a lot :)