我在Web上看到以下示例,以便从WCF服务将json Product
对象转换为js:
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)
});
}
现在,我不能说这里应该发生什么(我在javascript和jquery中的知识很小),但我可以说我想要理解这个片段,以便能够按顺序修改它包含嵌套类型,即:而不是ProductName,我们将从WCF服务响应中获得具有自己字段的列表属性。
现在,具体来说,在这个例子中,我不明白被调用的Product
函数在哪里,它似乎就在这里:
//Gets the Products
$.each(result, function (i, Product) {
productsArray[i]=Product;
});
但对我而言,似乎不清楚Product是否存在表现为传递给$ .each的lambda的声明参数,或者它是否实际调用'constructor'调用
你能告诉我这段代码吗?
答案 0 :(得分:3)
永远不会调用Product
函数。事实上,没有它,代码工作得非常好。发生的事情是WCF调用返回的JSON对象与Product
类(由Product
函数定义)的格式或结构完全相同。
each
函数接受一个数组,对于数组中的每个项,它执行提供的匿名函数。匿名函数有两个参数i
和Product
。 i
是数组中项的索引。 Product
是传入项的变量的名称。此时,名为Product
的变量已隐藏Product
函数。
项目已转换为Product
类的原因是因为对象具有相同的结构。