吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1297|回复: 9
收起左侧

[已解决] 菜鸟请教:Javascript中一个函数如何调用另一个函数内的函数的变量?

[复制链接]
wlue 发表于 2021-8-21 23:50
本帖最后由 wlue 于 2021-8-22 08:16 编辑

关键词:JavaScript变量调用、回调函数、ajax修改表格内容
我想用Ajax实现如下图这样的效果:

快照1.jpg

快照2.jpg

快照3.jpg

点击“编辑”按钮,给表格内容加上文本输入框,文本内容处于可编辑状态,同时按钮文字变成“确定”,修改完表格内容后,点击“确定”按钮表格变为正常状态。文字内容变为修改后的新内容。当然静态网页实现这个效果没有啥用,结合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) 函数的代码:

快照22.png



ajax函数执行没有问题,服务器端执行会返回两种结果,result = 1 表示与已有字段重复;result = 2 表示修改成功,其他表示更新失败;
我现在遇到的问题是在主函数  edittab(lab,FID) 中无法调用 ajax函数执行结果中的值 result ,用 return 语句也不行,虽然可以把最后的处理语句放入 var result = xhr.responseText; 之后解决问题,但感觉层次有点乱,而且还要重新定义dom对象、js语句等;
我现在的问题就是 在一个函数中如何调用另一个函数内的函数的变量值的问题,在网上搜了一下,提问这个问题的人还挺多,但没有找到满意的答案。而且还牵涉到回调函数的知识,看得一头雾水,短时间难以弄懂,请各位大侠帮忙指教,谢谢了!

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
fengshengshou + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

7R903 发表于 2021-8-22 00:16
[JavaScript] 纯文本查看 复制代码
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
[mw_shl_code=javascript,true]let res;
res=function ajax(ypfl,FID){
     /*.....*/

谢谢!
我是菜鸟级别,没有看懂您的代码,我先试试!
zhou773 发表于 2021-8-22 00:32
[JavaScript] 纯文本查看 复制代码
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("修改不成功!") ;
      }    

})

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wlue + 1 + 1 热心回复!

查看全部评分

 楼主| wlue 发表于 2021-8-22 00:50
zhou773 发表于 2021-8-22 00:32
[mw_shl_code=javascript,true]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吧,不然只能嵌套了

多谢指点!
 楼主| wlue 发表于 2021-8-22 08:14
zhou773 发表于 2021-8-22 00:32
[mw_shl_code=javascript,true]function ajax(ypfl, FID) {
  return new Promise(function(resolve, reje ...

根据您的指导,问题顺利解决,不过其中道理还需要我多多学习!
多谢了!
fengshengshou 发表于 2021-8-22 10:42
感谢分享自己的思路和问题,共同受教了!
 楼主| wlue 发表于 2021-8-22 11:55
fengshengshou 发表于 2021-8-22 10:42
感谢分享自己的思路和问题,共同受教了!

谢谢,共同学习!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表