gpt4 book ai didi

javascript - JavaScript 中函数参数的范围

转载 作者:行者123 更新时间:2023-11-28 20:16:27 25 4
gpt4 key购买 nike

我试图让一些 jQuery 函数更容易实现,所以我尝试将一些自动完成逻辑封装到一个函数中,以允许用户发送 URL 变量、Web 服务参数和控制我们需要取谁的值。使用以下脚本时,我收到错误:响应未定义。这个想法是,在此 Web 服务中将有许多具有自动完成功能的不同方法,我可以简单地将适当方法的名称及其参数传递给 Complete 方法,并在多个文本上具有该功能盒子。
为什么会这样

 $(document).ready(function ()
{

$('#auto').autocomplete(
{

source: function (request, response)
{
Complete('GetNames', 'hospitalName', '#auto');
}
});
function Complete(url, varName, target)
{
$.ajax(
{

type: "POST",
url: "Service.asmx/" + url,
data: "{'" + varName + "':'" + $(target).val() + "'}",
dataType: "json",
contentType: "application/json",
success: function (data)
{
//uncaught reference error response is not defined
response(data.d);
},
error: function (xhr)
{
console.log(xhr.status);
}
});
}

});

在我尝试取出 AJAX 调用并使其成为自己的方法之前,这一切工作正常。我想知道

  1. 源函数正在调用 Complete 函数,并且源函数具有 requestresponse 作为参数,那么为什么它们在我的脚本中未定义?
  2. 如何解决此问题并避免将来出现问题 #1。

最佳答案

以前它可以工作,因为变量 response 在 ajax 成功回调方法的闭包范围内可用。由于您现在创建了一个单独的方法,因此 ajax 回调不在源方法的闭包范围内,因此您需要将 requestresponse 参数作为参数传递给 完整方法

$(document).ready(function () {

$('#auto').autocomplete({
source: function (request, response) {
Complete(request, response, 'GetNames', 'hospitalName', '#auto');
}
});

function Complete(request, response, url, varName, target) {
$.ajax({

type: "POST",
url: "Service.asmx/" + url,
data: "{'" + varName + "':'" + $(target).val() + "'}",
dataType: "json",
contentType: "application/json",
success: function (data) {
//uncaught reference error response is not defined
response(data.d);
},
error: function (xhr) {
console.log(xhr.status);
}
});
}

});

关于javascript - JavaScript 中函数参数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19122077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com