javascript函数调用是如何工作的?
我有以下代码: 它对URL进行GET调用,获取一些对象,并将图像附加到HTML标记javascript函数调用是如何工作的?,javascript,Javascript,我有以下代码: 它对URL进行GET调用,获取一些对象,并将图像附加到HTML标记 function getDataFromApi(searchTerm, callback) { const URL1 = `some url`; const design = { url: URL1, data: { "dog breed name": searchTerm }, type: 'GET', success: callback };
function getDataFromApi(searchTerm, callback) {
const URL1 = `some url`;
const design = {
url: URL1,
data: {
"dog breed name": searchTerm
},
type: 'GET',
success: callback
};
$.ajax(design);
}
function displaySearchData(data) {
const allResultsLength = data.message.length;
const ranNum = Math.floor(Math.random() * allResultsLength);
const dogResults = data.message[ranNum];
$(`.js-search-results`).html(`<img src = ${dogResults}>`);
}
function watchSubmit() {
$('.js-search-form').submit(event => {
event.preventDefault();
let queryTarget = $(event.currentTarget).find('.js-query');
let query = queryTarget.val();
queryTarget.val("");
getDataFromApi(query, displaySearchData);
});
}
$(watchSubmit);
函数getDataFromApi(searchTerm,回调){
const URL1=`some url`;
常数设计={
url:URL1,
数据:{
“犬种名称”:搜索术语
},
键入:“GET”,
成功:回调
};
$.ajax(设计);
}
函数displaySearchData(数据){
const allResultsLength=data.message.length;
const ranNum=Math.floor(Math.random()*allResultsLength);
const dogfresults=data.message[ranNum];
$(`.js搜索结果`).html(`);
}
函数watchSubmit(){
$('.js搜索表单')。提交(事件=>{
event.preventDefault();
让queryTarget=$(event.currentTarget.find('.js query');
let query=queryTarget.val();
queryTarget.val(“”);
getDataFromApi(查询、显示搜索数据);
});
}
$(提交);
我获取getDataFromApi
和watchSubmit
但是getDataFromApi(查询,显示搜索数据)代码>对我来说一点都不直观。
我一直在编写Java,在没有参数的情况下如何调用displaySearchData
对我来说毫无意义-似乎行应该是getDataFromApi(query,displaySearchData(data))代码>
有人能解释一下这是如何在javascript中编译和执行的(基本上这是一种合法的语法吗?您需要查看的是函数getDataFromApi()
在该函数中,有一个“callback”参数。此参数稍后添加到$.ajax中。这是一个jQuery函数,当某个条件匹配时(比如在发送请求之前,当收到响应时,…),它将提供一些回调。这个$.ajax回调为您提供了3个参数,其中一个是数据(正在使用)、textStatus和jqXHR。通常,您只需要注意数据,因为它包含您请求数据的响应
因此,$.ajax成功后,将调用“callback”函数,即displaySearchData。由于$.ajax callback为您提供了数据参数,您可以将它们添加到displaySearchData的参数中。请注意,如果需要,您可以添加额外提供的2个参数
您可以在此处查看该函数:在good'ol jquery中的某个地方,有一段代码:
$.ajax = function(config){
...
// get the response from XHR request,
// and save it in, say, 'response'
...
// now check, if the response is OK 200
// and if so, execute next line
// which is basically - calling your displaySearchData method
config.success(response);
...
}
现在,config
是您的design
对象,它有一个属性success
,其中包含对displaySearchData
方法的引用
方法displaySearchData
的data
参数现在将携带对方法调用config.success(response)
中传递的变量response
的引用
EDIT:参数callback
还将方法displaySearchData
的引用转发到getDataFromApi
需要注意的概念:
函数可以在Javascript中作为参数传递给另一个函数,在这种情况下,我们只需要引用变量作为参数传递。不需要调用括号()
function A(data){...};
function b(referenceToFunctionA){
...
referenceToFunctionA(someData);
...
};
// correct
b(A);
// wrong, because adding () after any function reference variable
// invokes the method immediately.
// in this particular case the returned value of the method A
// is passed as argument instead of the reference to method A itself.
b(A());
欢迎使用JavaScript,我的朋友。当你继续使用JS时,准备好体验更多神奇的怪异。祝你好运。好了,displaySearchData
在你的API中被调用success:callback
。你正在将一个函数
传递给另一个函数
,然后让另一个函数代码>用它想做什么就做什么it@FaizuddinMohammed我想这是我对javascript不了解的部分。因此,如果它被作为回调调用,那么您不需要参数?在本例中,回调是一个函数,即您传递的函数。现在,您再次将它传递给$.ajax
的success
键。现在它是它可以在函数需要时调用函数。它还可以为函数提供参数。这种编程风格允许您具有异步性质。有点像这样说:当您从ajax获取数据后,这是您将执行的函数-传递它,无论您想要什么,我都会处理它。
@Faizudd在Mohammed中,如果我没有$.ajax,我是否需要一些东西来传递到displaySearchData
?