jQuery.ajax调用WordPress用户创建接口,成功回调参数全为undefined,如何解决?
问题分析与解决:Ajax回调参数undefined的原因
嗨,这个问题很常见,核心是你success回调的写法出错了!
你现在写的是:
success: self.handleUserResponse(),
这里的问题在于,你加了括号(),这会让JavaScript立即执行handleUserResponse方法,然后把它的返回值(因为这个方法没有return语句,所以返回undefined)当作success的回调函数。等到Ajax请求真正成功时,实际执行的是undefined,自然接收不到data、textStatus、jqXHR这些参数,所以你的三个console.log全是undefined。
修正方案
只需要去掉括号,把方法本身的引用传递给success,而不是调用它的结果:
jQuery.ajax({ method: 'POST', dataType: 'json', url: ajax_object.ajax_url, // Post URL data: userData, // Data context: self, success: self.handleUserResponse, // 去掉括号,传递方法引用 error: self.error })
额外说明
因为你已经设置了context: self,所以当handleUserResponse执行时,方法内部的this会自动指向你的外部类对象self,和你预期的行为一致,不需要额外用bind来绑定上下文(当然如果后续有其他场景需要,也可以用self.handleUserResponse.bind(self),不过这里context配置已经足够)。
修正之后,当Ajax请求成功返回时,jQuery会自动把data、textStatus、jqXHR这三个参数传递给handleUserResponse,你的console.log就能正常输出对应的值了。
内容的提问来源于stack exchange,提问作者Avery Kushner
相关产品推荐
相关产品推荐

