2013-02-19 35 views
0

我對jQuery文檔有點困惑。我正在查看this page describing $.getJSON。該代碼示例是:

$.getJSON('ajax/test.json', function(data) { 
    var items = []; 

    $.each(data, function(key, val) { 
    items.push('<li id="' + key + '">' + val + '</li>'); 
    }); 

    $('<ul/>', { 
    'class': 'my-new-list', 
    html: items.join('') 
    }).appendTo('body'); 
}); 

但方法簽名是jQuery.getJSON(url [, data ] [, success(data, textStatus, jqXHR) ]),其中data是發送到服務器的對象,並且success是當JSON請求成功返回調用的方法。

那麼,爲什麼示例代碼工作的?它似乎跳過了第二個論點。我本來期望正確的代碼是:

$.getJSON('ajax/test.json', {}, function(data) { 
// and then the same from here 

我知道,方括號意味着[, data][, success]參數是可選的,但我想我不會用的參數個數可變了解JavaScript的交易。

謝謝你的時間。

+0

我認爲它會檢查參數類型,如果是'function'它會成爲'成功',否則它將成爲'數據',但我不知道jQuery如何做它 – 2013-02-19 06:28:21

+1

jquery函數使用它的獨特的解析方法,它不僅檢查參數,而且參數計數和類型爲好。 – Bluemagica 2013-02-19 06:29:53

+2

爲什麼不看看源代碼? [.getJSON()](http://jsapi.info/jquery/1.8.3/jQuery.getJSON)(或[這裏](https://github.com/jquery/jquery)的完整源) – Andreas 2013-02-19 06:32:05

回答

1

jQuery的源代碼裏面:

// shift arguments if data argument was omitted 
     if (jQuery.isFunction(data)) { 
      type = type || callback; 
      callback = data; 
      data = undefined; 
     } 

因此,工程

+0

很高興它是jQuery特定的,而不是一些JavaScript的魔法我還沒有遇到! – user1675549 2013-02-19 07:15:09

0

數目的參數:

arguments.length 

然後,他們檢查類型的參數,並確定您提供哪些參數。

例如:

if(typeof arguments[0] === 'string') // first parameter is a string so it must be url 
if(typeof arguments[1] === 'object') // second parameter is an object so it must be data passed to server 
if(typeof arguments[2] === 'function') // third parameter is a function so it must be callback 
相關問題