Javascript 如何将函数分配给全局变量?
我试图将javascript函数的名称传递给全局变量。我有一个围绕$.ajax()构建的通用“CallMyWebService”函数。函数的url、谓词、contenttype等是基于全局变量的值设置的。在调用服务函数之前,会立即设置全局变量,而在全局变量重置为零之后 我的通用“CallMyWebService”函数如下:Javascript 如何将函数分配给全局变量?,javascript,jquery,Javascript,Jquery,我试图将javascript函数的名称传递给全局变量。我有一个围绕$.ajax()构建的通用“CallMyWebService”函数。函数的url、谓词、contenttype等是基于全局变量的值设置的。在调用服务函数之前,会立即设置全局变量,而在全局变量重置为零之后 我的通用“CallMyWebService”函数如下: function CallMyWebService() { $.ajax( { url : varUrl,
function CallMyWebService() {
$.ajax(
{
url : varUrl,
type : varHttpVerb,
cache : varCacheBool,
data : varData,
contentType : varContentType,
processdata : varProcessData,
dataType : varDataType,
async : varAsync,
success : varOnSuccess,
error : varOnError,
complete : varOnComplete
}
)
}
我遇到的问题是将函数名传递给varOnSuccess
、varOnError
和varOnComplete
。如果我有一个名为SuccessCallback()
的函数,并且我希望将服务调用的结果
传递给SuccessCallback()
,我如何将其分配给varOnSuccess
全局变量?变量赋值将在另一个名为SetupServiceCall()
的函数中进行。换句话说,在SetupServiceCall()
函数中,应该如何完成varOnSuccess=
varOnSuccess = SuccessCallback;
有关SuccessCallback()将接收的参数的详细信息,请参阅jQuery文档。我想说:
varOnSuccess = SuccessCallback;
有关SuccessCallback()将接收的参数的详细信息,请参阅jQuery文档。CallMyWebService应接受这些函数作为参数。您还应该通过引用而不是字符串名来传递它们 不要使用全局变量。如果您有任何类型的并行调用,这将失败 例如:
function CallMyWebService(successCallback, errorCallback) {
$.ajax(
...
success: successCallback,
error: errorCallback
...
);
}
//calling the service
function MySuccessHandler(data) {
alert('success');
}
function MyErrorHandler(data) {
alert('error');
}
CallMyWebService(MySuccessHandler, MyErrorHandler);
CallMyWebService应该接受这些函数作为参数。您还应该通过引用而不是字符串名来传递它们 不要使用全局变量。如果您有任何类型的并行调用,这将失败 例如:
function CallMyWebService(successCallback, errorCallback) {
$.ajax(
...
success: successCallback,
error: errorCallback
...
);
}
//calling the service
function MySuccessHandler(data) {
alert('success');
}
function MyErrorHandler(data) {
alert('error');
}
CallMyWebService(MySuccessHandler, MyErrorHandler);
你是说:
var varOnSuccess = null;
function SetupServiceCall() {
varOnSuccess = SuccessCallback; //note
}
你的意思是:
var varOnSuccess = null;
function SetupServiceCall() {
varOnSuccess = SuccessCallback; //note
}
?您可以在ajax调用中简单地使用不带括号的函数名,例如:
$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
});
您可以在ajax调用中简单地使用不带括号的函数名,例如:
$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
});
应该有用
但是,我认为最好将变量部分作为参数传递给CallMyWebService,如下所示:
function CallMyWebService(varSuccess, varError) {
$.ajax({
url : varUrl,
type : varHttpVerb,
cache : varCacheBool,
data : varData,
contentType : varContentType,
processdata : varProcessData,
dataType : varDataType,
async : varAsync,
success : varSuccess,
error : varError,
complete : varOnComplete
});
}
应该有用
但是,我认为最好将变量部分作为参数传递给CallMyWebService,如下所示:
function CallMyWebService(varSuccess, varError) {
$.ajax({
url : varUrl,
type : varHttpVerb,
cache : varCacheBool,
data : varData,
contentType : varContentType,
processdata : varProcessData,
dataType : varDataType,
async : varAsync,
success : varSuccess,
error : varError,
complete : varOnComplete
});
}
你真的在所有变量名前面加上了
var
@ThiefMaster-是的,我们处于维护模式,所以我们尽可能少做。您真的在所有变量名前面加了var
@ThiefMaster-是的,我们处于维护模式,所以我们所做的工作尽可能少。使用var关键字表示变量不是全局变量。@joidegn这不一定是真的。在函数外部声明的任何变量都是全局变量。使用var关键字表示变量不是全局变量。@joidegn这不一定是真的。在函数之外声明的任何变量都是全局变量。谢谢,这解决了当前的问题。虽然我觉得Jordan的解决方案(将vales传递到函数中)更可取,但有时你只需要使用绷带并继续移动。谢谢,这解决了眼前的问题。虽然我觉得乔丹的解决方案(将山谷传递到一个函数中)更可取,但有时你只需要使用绷带并继续移动。