菜鸟请教:Javascript中一个函数如何调用另一个函数内的函数的变量?
本帖最后由 wlue 于 2021-8-22 08:16 编辑关键词:JavaScript变量调用、回调函数、ajax修改表格内容
我想用Ajax实现如下图这样的效果:
点击“编辑”按钮,给表格内容加上文本输入框,文本内容处于可编辑状态,同时按钮文字变成“确定”,修改完表格内容后,点击“确定”按钮表格变为正常状态。文字内容变为修改后的新内容。当然静态网页实现这个效果没有啥用,结合Ajax技术才有意义。浏览器端和服务器端功能我都实现了,只是将二者结合在一起的时候,最后一步遇到问题,不能解决,请教各位大侠。
介绍一下我的流程,思路:
用到三个函数:checkstr(str);//用于客户端检验文本内容合法性;ajax(newtext,FID);//用于将修改后的新文本向服务器端传递; edittab(lab,FID);//主函数编辑客户端表格内容;
点击 “编辑”按钮执行 edittab(lab,FID)函数,运行 流程如下
{
得到需修改的单元格对象
得到单元格中原有的文本内容
将原文本内容放入文本输入框中供编辑
更改标签文字状态为“确定”
点击确定按钮执行
得到单元格1中新的文本内容
对新文本内容进行合法性处理、检验
通过合法性检验后,调用ajax(newtext2,FID)函数与服务器端交互,根据服务器端返回结果,做最后一步处理
switch(ajax函数处理结果)
{
case "1" : //服务器端返回结果为“1”时,表示与已有字段重复
alert("与已有字段重复,请重新修改") ;
break;
case "2" : //服务器端返回结果为“2”时,修改成功
td1.innerHTML = newtext2;//单元格中更新文本内容
lab.innerText = "编辑";//更改标签文字为原来状态
lab.onclick = ""; //使标签不再响应点击事件
break;
default: //其他情况,都表示修改不成功
alert("修改不成功!") ;
}
现在,我只贴出关键的 ajax(ypfl,FID) 函数的代码:
ajax函数执行没有问题,服务器端执行会返回两种结果,result = 1 表示与已有字段重复;result = 2 表示修改成功,其他表示更新失败;
我现在遇到的问题是在主函数edittab(lab,FID) 中无法调用 ajax函数执行结果中的值 result ,用 return 语句也不行,虽然可以把最后的处理语句放入 var result = xhr.responseText; 之后解决问题,但感觉层次有点乱,而且还要重新定义dom对象、js语句等;
我现在的问题就是 在一个函数中如何调用另一个函数内的函数的变量值的问题,在网上搜了一下,提问这个问题的人还挺多,但没有找到满意的答案。而且还牵涉到回调函数的知识,看得一头雾水,短时间难以弄懂,请各位大侠帮忙指教,谢谢了! let res;
res=function ajax(ypfl,FID){
/*.....*/
return result;
};
function test(){
console.log(res);
} cn005897 发表于 2021-8-22 00:16
let res;
res=function ajax(ypfl,FID){
/*.....*/
谢谢!
我是菜鸟级别,没有看懂您的代码,我先试试! function ajax(ypfl, FID) {
return new Promise(function(resolve, reject) {
// 把你的ajax 内部代码copy 进来
// 在result 下面加一行
resolve(result)
})
}
// 调用
ajax(ypfl, FID).then(function(result) {
// result ajax
switch(result)
{
case "1" : 服务器端返回结果为“1”时,表示与已有字段重复
alert("与已有字段重复,请重新修改") ;
break;
case "2" : 服务器端返回结果为“2”时,修改成功
td1.innerHTML = newtext2;//单元格中更新文本内容
lab.innerText = "编辑";//更改标签文字为原来状态
lab.onclick = ""; //使标签不再相应点击事件
break;
default: //其他情况,都表示修改不成功
alert("修改不成功!") ;
}
}) zhou773 发表于 2021-8-22 00:32
function ajax(ypfl, FID) {
return new Promise(function(resolve, reje ...
谢谢,您这个够详细!
这是ES6的写法吧,我以前看的一些JavaScript知识远远不够呀 本帖最后由 罗通晓 于 2021-8-22 06:33 编辑
去MDN上看一下Promise吧,不然只能嵌套了 罗通晓 发表于 2021-8-22 06:31
去MDN上看一下Promise吧,不然只能嵌套了
多谢指点!{:1_893:} zhou773 发表于 2021-8-22 00:32
function ajax(ypfl, FID) {
return new Promise(function(resolve, reje ...
根据您的指导,问题顺利解决,不过其中道理还需要我多多学习!
多谢了!{:1_893:}{:1_919:} 感谢分享自己的思路和问题,共同受教了! fengshengshou 发表于 2021-8-22 10:42
感谢分享自己的思路和问题,共同受教了!
谢谢,共同学习!{:1_893:}:handshake
页:
[1]