我试图用jquery学习ajax,但有些东西我不明白。 正如您在下面的代码中看到的,当我们调用onSuccess函数时,它不带参数,但函数本身确实接受了响应。 代码正在运行,但是如何以及为什么?如果我想向成功函数发送另一个参数我该怎么做?
$.ajax({
type: "POST",
//getListOfCars is my webmethod
url: "WebService.asmx/getListOfCars",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json", // dataType is json format
success: OnSuccess,
error: OnErrorCall
});
****function OnSuccess(response) {
console.log(response.d)
}****
答案 0 :(得分:1)
使用其他参数的一种方法是首先定义它们并且在同一范围内
function ajaxCaller(){
var useable= 'my inject';
$.ajax(
...
sucess: successListener
)
var successListener = function(data){
console.log(data);
console.log(useable); // can access here because the scope is given
}
}
ajax回调是修复定义的successListener(data,statusText,jqXHR),根据我的知识你不能在这个结构中注入一些参数。
有一件事是可能的。将您需要的参数附加到dataObject并通过api忽略它。你可以访问保存所请求参数的jqXHR对象。success: function(data, text, jqXHR)
答案 1 :(得分:1)
看起来你可能会混淆调用函数并将引用传递给函数的行为。请考虑以下代码:
function plusOne(inputParam) {
return inputParam + 1;
}
var value = plusOne(6) // value = 7
function funcCaller(callback){
var cbValue = poCallback(99);
return cbValue;
}
var value2 = funcCaller(plusOne); // value2 = 100
这里有一个名为 plusOne 的函数,它只是将1给你给它的参数加1并返回它。变量值设置为值7,因为您调用了传入参数6的 plusOne 函数。这是您调用函数时所期望的。 / p>
之后,您声明一个新函数,该函数接受其参数的另一个函数(通常称为回调函数)。所有 funcCaller 都会调用您传递的任何参数,默认值为99并返回响应。现在在最后一行,变量 value2 设置为100.这是因为它调用函数 funcCaller 并向其传递对 plusOne 的引用,注意它没有调用 plusOne ,只是将其引用作为参数传递给 funcCaller 。现在 funcCaller 用99调用 plusOne 并获得100作为响应,然后返回 value2 。
所以在这里你会注意到,在你的最后一行你刚刚传递了 plusOne 而没有任何参数,但它最终仍然被参数99调用。所以在jquery ajax中基本上会发生这样的事情,在它完成从POST获得响应之后,它会使用自己的一组参数调用传入的函数,特别是:函数(data,textStatus,jqXHR) )
答案 2 :(得分:0)
根据我对javascript函数/回调的经验,如果你没有指定参数,那么javascript就会为你处理它。如果您将代码更改为此代码:
$.ajax({
type: "POST",
//getListOfCars is my webmethod
url: "WebService.asmx/getListOfCars",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json", // dataType is json format
success: OnSuccess(true),
error: OnErrorCall(false)
});
然后它会传递你告诉它的内容,它不会填写响应对象。如果要传递更多参数,则需要向成功和错误回调处理程序添加参数。您可以显式传递它们,或者jquery可以将对象传递给它们。另外,请记住,jquery在后台调用这些处理程序,您只需指定jquery调用的函数的名称。