我在一个页面上组合了两个jQuery Ajax调用。我被困在每个的success: function()
上,因为一个是success: function(msg)
,另一个是success: function(data)
。我不确定这两者的含义,也不确定它们在组合代码中应该是什么。我将在下面分别拨打这两个电话,并将其合并。
Ajax请求#1:这个函数php页面上有一个$msg .= "<div class='pagination'><ul>";
。不确定这是否是指什么。
$.ajax
({
type: "GET",
url: "new_arrivals_data.php",
data: "page="+page,
success: function(msg)
{
$("#gallery_container").ajaxComplete(function(event, request, settings)
{
gallery_show();
loading_hide();
$("#gallery_container").html(msg);
});
}
});
Ajax请求#2:据我所见,在这个调用的php文件中的任何位置都没有data
。不知道function(data)
指的是什么。
$.get("new_arrivals_data.php",{imgs: value}, function(data){
$("#gallery_container").html(data);
});
组合请求:我在原始调用中msg
所在的位置放了一个?
,因为我不确定该放什么。
$.ajax
({
type: "GET",
url: "new_arrivals_data.php",
data: {page:page, imgs: value},
success: function(?)
{
$("#gallery_container").ajaxComplete(function(event, request, settings)
{
gallery_show();
loading_hide();
$("#gallery_container").html(?);
});
}
});
msg
和data
只是形式参数的名称。您可以使用这些引用在调用该函数时传递给该函数的响应数据。
您可以将其重命名为任何有效的JavaScript标识符。
尽管实际上没有任何理由在success:
回调中调用ajaxComplete
:
success: function( whatever_you_want_to_call_it ) {
gallery_show();
loading_hide();
$("#gallery_container").html( whatever_you_want_to_call_it );
}
$.get("new_arrivals_data.php",{imgs: value}, function( i_like_ice_cream ){
$("#gallery_container").html( i_like_ice_cream );
});
记住,在这两种情况下,都将函数作为参数传递。当收到响应时会调用该函数。
无论调用该函数的代码是什么,都会将响应作为第一个参数传递给该函数,以便您可以访问它。这就是您定义参数的原因。
这与在函数中声明变量非常相似。
$.get("new_arrivals_data.php",{imgs: value}, function(){
var i_like_ice_cream = arguments[0];
$("#gallery_container").html( i_like_ice_cream );
});
这几乎起到了同样的作用。您已经将一个变量与传递给回调函数的第一个参数相关联。
它可以是任何有效的变量名。只要在该函数的范围内使用相同的data
或msg
,它们都可以工作。
为了解释,您将success
设置为一个匿名函数,几乎只是一个没有名称的函数。因此,当jQuery调度success
事件时,它会调用您在创建ajax请求时赋予它的函数。它还将一些参数传递到该函数中(在本例中,是ajax请求的结果数据(。您所定义的是在这个新函数的作用域中应该调用的传入信息。
以以下代码为例:
function workOnBob(aWorker) {
aWorker("Bob")
}
var sayHi = function(name) { alert("Hello " + name); };
var getMarried = function(groom) { alert(groom + " is getting married!"); };
workOnBob(sayHi); // "Hello Bob"
workOnBob(getMarried); // "Bob is getting married!"
您可以看到workOnBob
是一个函数,应该向它传递一个匿名函数。它使用字符串"Bob"
调用该函数。此外,请注意,匿名函数sayHi
和getMarried
在其自己的范围内(分别为name
和groom
(对它们接收的参数进行了不同的命名。他们都得到了字符串"Bob",但他们都选择称之为不同的东西。
匿名函数和闭包可能会让人困惑,但一旦你掌握了它们的窍门,它们就会很有趣。
它只是包含ajax调用返回的响应数据的变量的名称。将其命名为对上下文最有意义的名称,以使代码更可读,例如html
、resp
、logged
。