wlue 发表于 2021-8-21 23:50

菜鸟请教: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语句等;
我现在的问题就是 在一个函数中如何调用另一个函数内的函数的变量值的问题,在网上搜了一下,提问这个问题的人还挺多,但没有找到满意的答案。而且还牵涉到回调函数的知识,看得一头雾水,短时间难以弄懂,请各位大侠帮忙指教,谢谢了!

7R903 发表于 2021-8-22 00:16

let res;
res=function ajax(ypfl,FID){
   /*.....*/
   return result;
};
function test(){
    console.log(res);
}

wlue 发表于 2021-8-22 00:22

cn005897 发表于 2021-8-22 00:16
let res;
res=function ajax(ypfl,FID){
   /*.....*/


谢谢!
我是菜鸟级别,没有看懂您的代码,我先试试!

zhou773 发表于 2021-8-22 00:32

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("修改不成功!") ;
      }   

})

wlue 发表于 2021-8-22 00:50

zhou773 发表于 2021-8-22 00:32
function ajax(ypfl, FID) {
return new Promise(function(resolve, reje ...

谢谢,您这个够详细!
这是ES6的写法吧,我以前看的一些JavaScript知识远远不够呀

罗通晓 发表于 2021-8-22 06:31

本帖最后由 罗通晓 于 2021-8-22 06:33 编辑

去MDN上看一下Promise吧,不然只能嵌套了

wlue 发表于 2021-8-22 07:00

罗通晓 发表于 2021-8-22 06:31
去MDN上看一下Promise吧,不然只能嵌套了

多谢指点!{:1_893:}

wlue 发表于 2021-8-22 08:14

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

感谢分享自己的思路和问题,共同受教了!

wlue 发表于 2021-8-22 11:55

fengshengshou 发表于 2021-8-22 10:42
感谢分享自己的思路和问题,共同受教了!

谢谢,共同学习!{:1_893:}:handshake
页: [1]
查看完整版本: 菜鸟请教:Javascript中一个函数如何调用另一个函数内的函数的变量?