如何将GET方法变量传入POST方法?全局变量调用报错求解
嘿,我明白你遇到的问题了——这其实是异步JavaScript操作的执行顺序在搞鬼!
问题根源
$http.get是异步请求,浏览器发送这个请求后不会原地等待它完成,而是直接往下执行后面的console.log(v)和$http.post。这时候GET请求的回调函数(.then里的代码)还没跑,v根本没被赋值,自然会抛出未定义的错误。
解决办法
你需要确保POST请求在GET请求完成、v被正确赋值之后再执行,有两种常用的实现方式:
方式1:把POST请求放到GET的.then回调内
这是最直接的异步处理方式,让POST等待GET的结果:
scope.Ex = function() { var u,w,v,c,is; $http.get("/api/patients/") .then(function(response) { scope.content = response.data; c = scope.content; is = c["0"].patient_ID; u = '/api/patients/'+is+'/'; v = "'"+u+"'"; // 注意:如果后端不需要带单引号,直接用u即可 // 现在v已经有值了,在这里执行POST请求 console.log(v); // 能正常输出 $http.post("/api/exams/", { patient_ID : v }) .then(function(postRes) { // 可选:处理POST成功的逻辑 console.log("POST请求完成", postRes.data); }) .catch(function(err) { // 可选:处理POST失败的逻辑 console.error("POST请求出错", err); }); }) .catch(function(getErr) { // 可选:处理GET请求失败的逻辑 console.error("GET请求出错", getErr); }); };
方式2:用async/await让代码更像同步逻辑(支持ES6+环境)
如果你的项目允许使用ES6+语法,可以把函数改成异步函数,代码可读性更高:
scope.Ex = async function() { try { // 等待GET请求返回结果 const response = await $http.get("/api/patients/"); scope.content = response.data; const c = scope.content; const is = c["0"].patient_ID; const u = '/api/patients/'+is+'/'; const v = "'"+u+"'"; console.log(v); // 正常输出 // 等待POST请求完成 const postResponse = await $http.post("/api/exams/", { patient_ID : v }); console.log("POST请求成功", postResponse.data); } catch(error) { // 统一处理所有请求的错误 console.error("请求出错", error); } };
额外提醒
你给v加了单引号("'"+u+"'"),要确认后端接口是否需要这种带单引号的格式。如果后端只需要原始的u值,直接把patient_ID设为u就行,避免不必要的格式问题。
内容的提问来源于stack exchange,提问作者Sai Manoj
相关产品推荐
相关产品推荐

