2012-01-12 2 views
1

Я видел следующий пример в Интернете, чтобы получить объект Json Product в JS из службы WCF:вложенного прототип с JQuery

function Product(ProductName, ProductDesc, Price, Quantity) { 
    this.ProductName = ProductName; 
    this.ProductDesc = ProductDesc; 
    this.Price = Price; 
    this.Quantity = Quantity; 
} 

function CallWCFService(WCFServiceURL) { 
    $.ajax({ 
     type: "GET", 
     url: WCFServiceURL, 
     contentType: "application/json; charset=utf-8", 
     dataType: 'json', 
     processdata: true, 
     success: function (msg) { 
      WCFServiceSucceeded(msg); 
     }, 
     error: WCFServiceFailed 
    }); 
} 

//On Successful WCF Service call 
function WCFServiceSucceeded(result) { 
    var productsArray = new Array(); 

    //Gets the Products 
    $.each(result, function (i, Product) { 
     productsArray[i]=Product; 
    }); 

    //Print all the product details 
    $.each(productsArray,function(i,Product) 
    { 
     alert(Product.ProductName + ' ' + Product.ProductDesc + ' ' + Product.Price + ' ' + Product.Quantity) 
    }); 
} 

(original source)

Теперь, я не могу сказать, что на самом деле (мои знания в javascript и jquery очень малы), но я могу сказать, что хочу понять этот фрагмент, чтобы иметь возможность изменять его, чтобы содержать вложенный тип, т. е. вместо ProductName у нас будет свойство списка из ответа службы WCF с его собственными полями.

Теперь, конкретно, в этом примере, я не понимаю, где функция Product вызывается, то, казалось бы, что он находится здесь:

//Gets the Products 
    $.each(result, function (i, Product) { 
     productsArray[i]=Product; 
    }); 

, но мне кажется, что это неясно, работает ли Продукт в качестве объявленного параметра лямбда, который передается в $ .each, или если он фактически вызывает вызов 'constructor'

Можете ли вы рассказать мне об этом коде?

ответ

3

Функция Product никогда не вызывается. На самом деле, код работает отлично без него. Что происходит, объекты JSON, возвращаемые вызовом WCF, находятся в том же формате или структуре, что и класс Product (определенный функцией Product).

Функция each принимает массив, и для каждого элемента в массиве он выполняет предоставленную анонимную функцию. Анонимная функция имеет два параметра: i и Product. i - это индекс элемента в массиве. Product - это имя переменной для переданного элемента. В этот момент переменная с именем Product затеняла функцию Product.

Причина, по которой объекты были преобразованы в класс Product, состоит в том, что объекты имеют одинаковую структуру.

Смежные вопросы