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

如何在Fetch API中处理电话号码参数的‘+’符号?

问题原因

你遇到的问题是因为+在URL查询参数里是空格的编码符号。当你直接把+4100000000拼到URL里,服务器会把+解析成空格,实际收到的参数变成 4100000000,自然找不到数据库里的+4100000000记录。而Insomnia这类工具会自动帮你编码URL参数,所以能正常请求。

解决办法

用encodeURIComponent()对电话号码参数做编码处理,它会把+转换成%2B,服务器收到后会自动解码回+,这样参数就能正确匹配了。

另外你的代码还有两个小问题要改:

  • 第二个.then()里写的resolve(data),但你接收的参数是res,应该改成resolve(res)
  • 没必要手动套一层Promise,fetch本身就返回Promise,可以简化代码

修正后的代码(async/await版):

async function GETdynamoDBapi(phoneNumber) {
  const encodedPhone = encodeURIComponent(phoneNumber);
  const response = await fetch(`https://api?phoneNumber=${encodedPhone}`);
  return response.json();
}

如果习惯用Promise链式调用:

function GETdynamoDBapi(phoneNumber) {
  const encodedPhone = encodeURIComponent(phoneNumber);
  return fetch(`https://api?phoneNumber=${encodedPhone}`)
    .then(res => res.json())
    .catch(err => {
      throw err;
    });
}
额外优化

如果要兼容数据库里两种格式的号码,还可以在请求前统一处理参数:

  • 统一加+号:const formattedPhone = phoneNumber.startsWith('+') ? phoneNumber : '+' + phoneNumber;
  • 或者统一去掉+号:const formattedPhone = phoneNumber.replace(/^\+/, '');
    处理完再编码发送,这样不管传哪种格式,都能匹配到数据库记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:11:09