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
相关产品推荐
相关产品推荐

