Laravel中无法获取datepicker值以从URL获取JSON的问题求助
Laravel中Datepicker值无法传递导致API请求无输出的排查与解决
作为Laravel新手遇到这种问题很正常,咱们一步步拆解排查,找出问题所在:
一、前端JS代码的明显错误
首先看你的JS文件里这行代码:
var input = $(this).attr("datepicker");
这里的datepicker是元素的id,并不是一个HTML属性,你应该获取元素的name属性(你的input的name就是datepicker),改成:
var input = $(this).attr("name");
另外,gijgo的datepicker组件有时候需要显式绑定事件,建议把datepicker的初始化和事件绑定改成这样:
$('#datepicker').datepicker({ format : 'yyyy-mm-dd' }) .on('change', function(e) { $('#jampraktek').val(''); // 手动触发dynamics类的change事件,确保AJAX请求能发送 $(this).trigger('change'); });
二、后端代码的潜在问题
1. 检查Guzzle依赖的引入
你的控制器里用了Client来请求外部API,必须先引入Guzzle的类:
use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; // 用于捕获请求异常
如果没引入这两个类,new Client()会直接报错,导致没有任何输出。
2. 给API请求加上异常捕获
外部API请求可能因为网络、参数等原因失败,加上异常捕获能帮你定位问题:
function jampraktekterpilih(Request $request){ $client = new Client(); $value = $request->get('value'); $dependent = $request->get('dependent'); // 先记录收到的日期值,排查前端是否传对 error_log('收到的日期值: ' . $value); try { $response = $client->get('http://192.168.11.213:8080/jadwaldokter-v04-0.0.1/Jadwal/JadwalDokterDenganTanggalDokter/'.$value.'/dan/17'); $res = json_decode($response->getBody()->getContents()); // 记录API返回的数据,确认是否拿到有效结果 error_log('API返回数据: ' . print_r($res, true)); $output = '<option value="">pilih '.ucfirst($dependent).'</option>'; foreach($res as $key=>$node) { $output .= '<option value="'.$this->hari($node->hariPraktek).'">'.$this->hari($node->hariPraktek).'</option>'; } echo $output; } catch (RequestException $e) { // 捕获请求异常并记录 error_log('API请求错误: ' . $e->getMessage()); // 返回错误提示给前端 echo '<option value="">加载数据失败</option>'; } }
三、浏览器端调试技巧
打开浏览器开发者工具(F12),通过以下方式排查:
- Console标签:查看是否有JS报错(比如jQuery未引入、gijgo加载失败等)
- Network标签:查看XHR类型的请求,检查:
- 请求的参数是否包含正确的
value(日期值) - 请求的状态码是否为200
- 后端返回的响应内容是什么
- 请求的参数是否包含正确的
另外,给AJAX请求加上错误回调,方便查看问题:
$.ajax({ url:'/daftarPeriksa/jampraktekterpilih', method: "POST", data:{input:input, value:value, _token:_token, dependent:dependent}, success:function(result) { console.log('AJAX请求成功:', result); $('#'+dependent).html(result); }, error:function(xhr, status, error) { console.log('AJAX请求错误:', xhr.responseText, status, error); } })
四、额外验证步骤
你可以用Postman或者curl工具直接向后端路由发送POST请求,带上value=2019-01-08和有效的CSRF token,看看后端返回什么内容。如果能返回正确的option列表,说明后端逻辑没问题,问题出在前端;如果还是没有输出,就重点排查后端的Guzzle引入和API请求逻辑。
按照这些步骤一步步排查,应该能快速找到问题并解决。
内容的提问来源于stack exchange,提问作者Yeru
相关产品推荐
相关产品推荐

