从 ajax 获取数据库记录(错误 500)
get database records from ajax (error 500)
我正在通过 GET 执行 AJAX 请求以从视图中的数据库接收数据。
我的HTML:
<form method="POST" action="{{ route('myaccount.facturacion.guardar') }}">
@csrf
...
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Código postal</label>
<input type="text" name="codigo_postal" class="form-control" id="codigo_postal" maxlength="5" required>
</div>
</div>
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Localidad</label>
<input type="text" name="localidad" id="localidad" class="form-control" required>
</div>
</div>
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Provincia</label>
<input type="text" name="provincia" id="provincia" class="form-control" required>
</div>
</div>
</form>
我正在尝试执行的 AJAX 请求:注意:我将原来的 url 替换为:...
$(document).ready(function () {
var codigo_postal = $('#codigo_postal');
codigo_postal.keyup(function () {
var value = codigo_postal.val();
if (value.length == 5) {
$.ajax({
url: '.../postal/' + value,
method:'GET'
}).done(function(res){
alert(res)
});
}
})
});
我尝试发出请求的路线:
Route::get('postal/{codigo_postal}', 'MyAccountController@obtenerCodigoPostal')->name('postal_code.get');
附加到路由的控制器方法:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
$postal_code = $cp->codigo_postal;
return response(['postal_code' => $postal_code]);
}
我得到的错误:
你能帮我吗?请
看起来响应已成功返回到服务器,但正如 Rory 所说,这是服务器端代码上的错误。这里:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
$postal_code = $cp->codigo_postal;
return response(['postal_code' => $postal_code]);
}
如果您正在尝试 return Categoria
是否存在,这有点不同。现在,您 return 正在使用与方法完全相同的东西,即 codigo_postal
。但是,如果不存在具有该邮政编码的 Categoria
,它将在服务器上失败(500 错误),因为 $cp
是 null,因此无法拉取来自空对象的邮政编码。
我建议尝试发回邮政编码或失败消息,并在中间进行错误检查以防止服务器错误:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
if($cp === null){
return response('Fail', 200);
}
else{
$postal_code = $cp->codigo_postal;
return response('Pass', 200);
}
}
您可以稍后调整响应 - 这只会为您提供一种测试成功的方法。
HTH
我正在通过 GET 执行 AJAX 请求以从视图中的数据库接收数据。
我的HTML:
<form method="POST" action="{{ route('myaccount.facturacion.guardar') }}">
@csrf
...
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Código postal</label>
<input type="text" name="codigo_postal" class="form-control" id="codigo_postal" maxlength="5" required>
</div>
</div>
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Localidad</label>
<input type="text" name="localidad" id="localidad" class="form-control" required>
</div>
</div>
<div class="col-lg-3">
<div class="form-group mb-3">
<label>Provincia</label>
<input type="text" name="provincia" id="provincia" class="form-control" required>
</div>
</div>
</form>
我正在尝试执行的 AJAX 请求:注意:我将原来的 url 替换为:...
$(document).ready(function () {
var codigo_postal = $('#codigo_postal');
codigo_postal.keyup(function () {
var value = codigo_postal.val();
if (value.length == 5) {
$.ajax({
url: '.../postal/' + value,
method:'GET'
}).done(function(res){
alert(res)
});
}
})
});
我尝试发出请求的路线:
Route::get('postal/{codigo_postal}', 'MyAccountController@obtenerCodigoPostal')->name('postal_code.get');
附加到路由的控制器方法:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
$postal_code = $cp->codigo_postal;
return response(['postal_code' => $postal_code]);
}
我得到的错误:
你能帮我吗?请
看起来响应已成功返回到服务器,但正如 Rory 所说,这是服务器端代码上的错误。这里:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
$postal_code = $cp->codigo_postal;
return response(['postal_code' => $postal_code]);
}
如果您正在尝试 return Categoria
是否存在,这有点不同。现在,您 return 正在使用与方法完全相同的东西,即 codigo_postal
。但是,如果不存在具有该邮政编码的 Categoria
,它将在服务器上失败(500 错误),因为 $cp
是 null,因此无法拉取来自空对象的邮政编码。
我建议尝试发回邮政编码或失败消息,并在中间进行错误检查以防止服务器错误:
public function obtenerCodigoPostal($codigo_postal) {
$cp = Categoria::where('codigo_postal', $codigo_postal)->first();
if($cp === null){
return response('Fail', 200);
}
else{
$postal_code = $cp->codigo_postal;
return response('Pass', 200);
}
}
您可以稍后调整响应 - 这只会为您提供一种测试成功的方法。
HTH