2011-08-21 395 views
5

我在页面上组合了两个jQuery Ajax调用。我被困在每个success: function(),一个是success: function(msg),另一个是success: function(data)。我不确定这些是什么意思,以及它们应该在组合代码中。我将把下面的两个电话分开放置,并按照我迄今为止的方式进行组合。在我的jQuery Ajax调用中,`success:function(msg)`是什么意思?

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:据我所看到的,有没有data在此调用的PHP文件的任何地方。不知道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(?); 
     }); 
    } 
}); 

回答

3

msgdata仅仅是形式参数的名称。您可以使用它们来引用在调用时传递给该函数的响应数据。

您可以将其重命名为任何有效的JavaScript标识符。

虽然目前还没有任何真正的理由骂ajaxCompletesuccess:回调中:

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); 

}); 

这几乎是一回事。你已经将一个变量与传入你的回调函数的第一个参数关联起来。

+0

那么你是说它可以字面上是什么?它不必与php文件有任何关系? – stefmikhail

+0

@stefmikhail:任何有效的JavaScript变量名称。它与PHP没有任何关系。这就像在函数中声明一个变量一样。 'function(){var msg = arguments [0]; /*...*/}'实际上是一样的。 – user113716

1

它只是一个名字为含有来自AJAX调用返回的响应数据的变量。将它命名为最适合上下文的内容,以使代码更易读,例如htmlresplogged

2

它可以是任何有效的变量名称。无论是datamsg将工作,就像只要你使用该功能的范围内,同一个。

解释一下,你将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"调用该函数。另请注意,匿名函数sayHigetMarried已在其自己的作用域内分别命名了它们所接收的参数(分别为namegroom)。他们都得到了字符串“鲍勃”,但他们都选择称它为不同的东西。

匿名函数和闭包可能会让人困惑,但是一旦你掌握了它们,它们会非常有趣。

+0

梦幻般的答案!我现在明白好多了。试着去学习所有这些东西是很难的,不知道任何我可以问的人。好奇的是,上面的调用都在'function loadData(page){}'内。这个“页面”是否意味着与上面的解释有所不同?稍后在代码中它将以下面的方式调用:'loadData(1)'。这是什么意思? – stefmikhail

+0

顺便说一句,爱你的用户名! – stefmikhail