Ajax的回调函数(callback)

Ajax中的回调函数(利用PHP+JS实现)

很多和我一样的初学者,总是搞不懂什么是回调函数。我经过了几天的学习将自己的理解记录在这里。

一、为什么使用回调函数?

首先我们应该明白我们为什么要用回调函数?我们用它能够解决什么样的问题。下边看一个例子。


(1)在以上函数d中如果我们怎样拿到temp的值?

我们应该知道在JS中或者很多语言中,我们每次用一个变量或者函数时,当执行时都会向上找。如下图。


(2)当我们在函数a中要用到变量test中,我们发现函数内部并没有调用,所有我们会去函数外边找。一级一级找,当找到了window对象时如果发现还没有找到,则会出现变量未定义的错误。

(3)下面回到我们一开始讨论的问题,我们怎样在d函数中拿到temp的值呢?看下面的方法。


 

(4)我们采取的方法在匿名函数中调用了d函数并且传了一个temp变量,而在d函数加了一个参数用来接受。

然后拿到值之后,我们就可以为所欲为了。

(5)其实上边的拿到函数内部值的过程就是回滚函数的意思。

(6)而回调函数就是为了解决拿到函数内部的值而产生的。

二、在ajax中我们是怎样应用回调函数的呢?

举一个比较使用的例子。

最终实现目标:在注册表单时判断用户名是否占用。

步骤如下:

 

(1)      在HTML页面中设立一个表单,这个表单包括一个input. 我们想要实现的是在我们光标离开了输入框之后,就会判断该用户名是否可用。如下图

 

(2)      我们封装一个ajax的文件。在这个文件中主要实现两个功能。

第一个功能是:通过ID获取DOM对象

第二个功能是:实现通过GET方式的ajax异步传输。

我们这里先写第一个功能。



 

(3)      现在我们回到我们的HTML页面中,我们给表单中的input绑定一个onblur事件(也就是失去焦点事件);

 

(4)      接下来我们要通过JS拿到我们所输入的值传递给Ajax对象,然后通过拿到的值让Ajax对象去请求连接PHP。让PHP去比对下有没有我们所输入的值。然后给我们返回结果。我将这个过程再分解成几小步。

[1]在ajax.js中添加一个函数,并且赋给$.


[2]上面写到了callback参数,并且我们又给了他一个参数。这能够说明我们的callback其实就是一个函数传递过来了。那么为什么要使用callback回滚函数呢?

三个字:作用域。我们在一开始的例子里就说了我们的函数或者变量都会向它们的上一级去寻找,而不会向下寻找。但是在这里我们把$.get放在了一个自调用的匿名函数里边。而我们所获取到的responseText内容又在最外层的自调用匿名函数的里层。我们怎样才能拿到数据呢?

这时我们就会想到回调函数,而很多项目也的确是这样用的。

下面我们就写callback函数。

[3]回到静态页面,html中,我们把输入的内容发送到ajax中。


[4]我们在上面说了假定用户名有了,我们在PHP中会echo 1;

如果没有则输出0。下面就来实现这个功能。


[5]PHP服务器的实现。(这里我们就不连接数据库等操作了,模拟下操作)

(5)      现在我们已经全部完成了,大家可以测试了。

三、总结

所谓回调函数其实就是函数调用,只不过在函数里边调用函数外边的函数而已。

 

 

  • 3
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
前端中的回调函数是一种常见的编程模式,用于在某个操作完成后执行特定的代码。回调函数通常作为另一个函数的参数传递,并在需要的时候被调用。 在前端开发中,回调函数可以用于处理异步操作,例如AJAX请求、定时器、事件处理等。当这些操作完成时,会调用相应的回调函数来处理返回的结果或执行特定的操作。 在使用回调函数时,需要注意以下几个问题: 1. 确认回调函数是一个函数:在调用回调函数之前,最好先判断它是否是一个函数。这可以通过使用typeof操作符来检查callback的类型是否为函数。 2. 回调函数中的this指向问题:在回调函数中,this的指向可能会发生变化。例如,在回调函数中使用箭头函数作为参数传入另一个函数,可以避免this指向不明确的问题。这是因为箭头函数没有自己的this,它继承自外部作用域的this。 3. 回调函数的参数传递:回调函数可以接收参数,并在调用时传递相应的值。这样可以将操作的结果传递给回调函数,并在回调函数中进行处理。 总之,前端中的回调函数是一种常见的编程模式,用于处理异步操作和执行特定的代码。使用回调函数时,需要注意确认回调函数是一个函数、处理回调函数中的this指向问题以及传递参数给回调函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JS中的 回调函数callback)](https://blog.csdn.net/weixin_47075145/article/details/125752446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值