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

jQuery发起POST请求时payload报message变量未定义问题

问题修复方案

你遇到的报错核心原因有两个,附带还有几个逻辑写法错误,逐一修正即可:

  • 作用域错误:message是在pushData函数内部通过let声明的局部变量,函数外部的POST请求代码无法访问到它。同时你从未调用过pushData()函数,就算把message声明为全局变量,不执行函数也不会生成这个值。
  • 赋值逻辑写反:$.getJSON的回调参数result才是接口返回的IP地址数据,你写的result = rawdata是把初始为undefined的rawdata赋值给临时参数result,根本没有把接口返回值存下来,正确写法应该是rawdata = result。
  • 废弃的同步请求写法:$.ajaxSetup({async: false})这种同步AJAX早已被Web标准废弃,请求过程会完全阻塞浏览器主线程导致页面卡死,所有依赖接口返回值的逻辑都应该放到请求回调中按顺序执行。
  • 请求执行时机错误:你把POST请求的代码直接写在全局作用域,页面加载后会立刻执行,这时候IP查询请求还没返回,就算作用域配置正确,拿到的也会是空值。

修正后可直接运行的代码如下:

function pushData() {
  // 第一步:请求当前IP归属地信息
  $.getJSON('https://api.db-ip.com/v2/free/self', function(rawdata) {
    console.log('IP接口返回数据:', rawdata);
    // 拿到返回值后组装提交参数
    const message = {
      ip: rawdata.ipAddress,
      country: rawdata.countryName,
      city: rawdata.city
    };
    console.log('待提交数据:', message);

    // 可选:发送GET请求
    $.ajax({
      url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/get",
      type: "GET",
      success: function(result) {
        console.log('GET请求返回:', result);
      },
      error: function() {
        console.log("GET请求失败");
      }
    })

    // 第二步:参数组装完成后发送POST提交请求
    $.ajax({
      url: "https://xxxx.execute-api.eu-west-2.amazonaws.com/post",
      crossDomain: true,
      type: "POST",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      data: JSON.stringify(message),
      success: function(result) {
        console.log('POST提交成功:', result);
      },
      error: function() {
        console.log("error pushing data");
      }
    })
  })
}
// 调用函数启动整个流程
pushData();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:39:49