You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向外部API传递多个ID数组并获取全部请求对应的返回结果

问题原因及修复方案

核心问题点

  • 你把视图返回语句return view()写在了foreach循环内部,程序执行完第一次ID请求后就直接返回结果终止运行,自然只能拿到第一个ID的响应
  • $jsonData变量每次循环都会被新的响应覆盖,没有存储所有ID的返回结果
  • 你的请求地址多写了一层http://,http://http://127.0.0.1:8000属于无效地址,会导致请求失败

修复后代码

public function DeviceStatus(Request $request)
{
    $queryinput = $request->deviceNumber;
    $idsArray = explode(" ", $queryinput);
    // 初始化存储所有结果的数组
    $jsonData = [];

    foreach ($idsArray as $key => $id) {
        try {
            // 修复重复的http://前缀
            $response = Http::get('http://127.0.0.1:8000/extapi/v12/DeviceData/ByDeviceDataSerial/'.$id);
            // 把当前ID的结果追加到数组里,用ID作为键方便后续取值
            $jsonData[$id] = $response->json();
        } catch (\Exception $exception) {
            return back()->withError($exception->getMessage());
        }
    }
    // 循环结束所有请求完成后再返回视图
    return view('tracedevice.ectsdevicestatus', compact('jsonData'));
}

优化建议

如果接口支持批量传ID,建议调整为一次请求传递所有ID,减少HTTP请求开销提升性能。如果ID数量较多,也可以用Laravel HTTP客户端的并发请求特性优化,写法如下:

$promises = [];
foreach ($idsArray as $id) {
    $promises[$id] = Http::async()->get('http://127.0.0.1:8000/extapi/v12/DeviceData/ByDeviceDataSerial/'.$id);
}
$responses = Illuminate\Support\Facades\Http::pool($promises);
$jsonData = [];
foreach ($responses as $id => $response) {
    $jsonData[$id] = $response->json();
}

多个请求并行发送可以大幅缩短总请求耗时。

内容的提问来源于stack exchange,提问作者Melx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:27:04