当前位置: 首页 > news >正文

原生JS请求API

GET方式前端- 多个参数

// 场景:查询数据 GET方式asyncfunctiongetData(){constparams={sceneId:'order_123',userId:'user_456',type:'normal'};// 方式2:使用URLSearchParams(推荐)constqueryString=newURLSearchParams(params).toString();consturl2=`/api/data?${queryString}`;constresponse=awaitfetch(url2);constdata=awaitresponse.json();returndata;}

GET方式后端:

[HttpGet("data")] public IActionResult GetData([FromQuery] SceneQueryParams query) { // 直接通过对象访问 return Ok(new { query.SceneId, query.UserId, query.Type, message = "GET请求成功" }); }

POST方式-前端:

// 场景:提交复杂对象asyncfunctioncreateOrder(){constpostData={sceneId:'order_123',userInfo:{name:'张三',phone:'13800000000'},items:[{id:1,price:99.9},{id:2,price:199.9}]};constresponse=awaitfetch('/api/order',{method:'POST',// 指定POST方法headers:{'Content-Type':'application/json'// 声明发送JSON},body:JSON.stringify(postData)// 序列化为JSON字符串});if(!response.ok){thrownewError(`请求失败:${response.status}`);}constresult=awaitresponse.json();console.log('创建成功:',result);returnresult;}

POST方式-后端:

[HttpPost("order")] public IActionResult CreateOrder([FromBody] OrderDto dto) { // dto已经自动反序列化 return Ok(new { success = true, message = "订单创建成功", sceneCode = $"{dto.SceneId}_{Random.Shared.Next(0, 1000000).ToString("D6)}" }); }

再举例-修改数据:POST

后端控制器
// Controllers/SceneController.cs [ApiController] [Route("api/scene")] public class SceneController : ControllerBase { [HttpPost("update-code")] public IActionResult UpdateSceneCode([FromBody] string sceneId) { // 参数验证 if (string.IsNullOrWhiteSpace(sceneId)) return BadRequest(new { success = false, message = "sceneId不能为空" }); try { // 生成场景编码 string sceneCode = $"{sceneId}_{Random.Shared.Next(0, 1000000).ToString("D6)}"; // **模拟数据库更新**(实际项目中替换为真实DB操作) Console.WriteLine($"[模拟数据库更新] sceneId={sceneId}, sceneCode={sceneCode}"); return Ok(new { success = true, sceneCode, message = "生成成功" }); } catch (Exception ex) { // 记录错误日志(实际项目中用ILogger) Console.WriteLine($"[错误] {ex.Message}"); return StatusCode(500, new { success = false, message = "服务异常" }); } } }
前端JS
// 按钮事件:传递sceneIdasyncfunctiongenerateAndSaveSceneCode(sceneId){// 验证参数if(!sceneId){alert('sceneId不能为空');return;}// 显示加载状态constbutton=document.activeElement;if(button)button.disabled=true;try{// POST提交单个参数constresponse=awaitfetch('/api/scene/update-code',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(sceneId)// 直接序列化字符串});if(!response.ok){thrownewError(`HTTP错误:${response.status}`);}constresult=awaitresponse.json();if(result.success){// 成功后打开二维码页面consturl=`/miniprogram/checkinqrcode.html?scene=${encodeURIComponent(result.sceneCode)}`;window.open(url,'_blank','noopener,noreferrer');console.log('场景编码生成成功:',result.sceneCode);}else{alert('生成失败: '+result.message);}}catch(error){console.error('操作失败:',error);alert('生成失败: '+error.message);}finally{// 恢复按钮状态if(button)button.disabled=false;}}
http://www.cnnetsun.cn/news/103128.html

相关文章:

  • QQ截图独立版:解锁Windows屏幕捕捉新体验的完整手册
  • Emby界面美化完全手册:3种方法打造专属影音中心
  • EmotiVoice语音能量调节功能改善发音力度
  • uvm32一款极简、无依赖的虚拟机沙盒,支持动态加载APP,仅需3KB Flash/1KB RAM
  • Blender版本管理革命:智能化工具如何重塑3D创作工作流
  • 5、Linux 命令使用指南
  • EmotiVoice与动作捕捉结合:打造全感知虚拟人
  • Stable Diffusion WebUI Forge技术架构深度解析:PyTorch生态下的AI绘画引擎
  • 如何快速掌握Grammarly插件:开发者的写作辅助完整指南
  • 5分钟快速上手:yt-dlp-gui 图形界面视频下载终极指南
  • ReadCat电子书阅读器:打造极致纯净的数字阅读体验
  • 韩国掘金必看:Coupang火箭速度背后,跨境卖家的蓝海锚点逻辑
  • FT Transformer终极指南:从架构解析到实战优化
  • 告别混乱桌面:5个步骤用Windows Terminal打造高效远程工作站
  • 16、Kubernetes存储与有状态应用运行指南
  • 19、Kubernetes资源配额、集群容量管理与性能优化
  • 21、高级 Kubernetes 网络技术全解析
  • FastAPI多环境部署终极指南:3步告别配置地狱
  • DAIR-V2X车路协同实战手册:从数据到决策的全链路解密
  • EmotiVoice语音温度调节概念引入,冷暖随心
  • Rainmeter官网中文版下载和安装教程(附安装包,超级详细)
  • EmotiVoice语音合成抗噪能力测试:嘈杂环境中仍清晰可辨
  • 邦邦汽服携手吉利循环产业中心解锁汽车后市场绿色循环新路径
  • 浅谈:算法中的斐波那契数(四)
  • 一项基于粒子图像测速(PIV)速度场反演的压力场重构技术
  • HarmonyOS 教学实战(三):列表分页、下拉刷新与性能优化(让列表真正“丝滑”)
  • 智能刷课神器AutoUnipus:3步解放你的网课时间,100%正确率太惊艳![特殊字符]
  • NetBox拓扑视图插件:让网络管理更直观的5个实用技巧
  • EmotiVoice在教育领域的应用探索:让电子教材‘开口讲课’
  • Blender建筑生成插件building_tools:3步创建专业建筑模型