Rob*_*ozo 3 c# ajax jquery json web-services
我尝试使用以下教程在asp.net应用程序中实现一个简单的Web服务:http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx#1301和http://dotnetslackers.com/articles/ajax /Using-jQuery-with-ASP-NET.aspx
问题是,我的数据正在返回,如此屏幕截图所示(根据firebug):
$("#btnGet").click(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "TimeService.svc/GetCar",
data: "{}",
dataType: "json",
success: function (data) {
alert(data.d);
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的Web服务方法如下所示:
[OperationContract]
public string GetCar()
{
using (var sqlc = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CarTracker.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"))
{
sqlc.Open();
var cmd = sqlc.CreateCommand();
cmd.CommandText = "SELECT CarID, CarName FROM tblCars";
using (var reader = cmd.ExecuteReader())
{
string sCar = "";
int testcount = 1;
for (int i = 0; i < testcount; i++)
{
reader.Read();
sCar += reader["CarName"].ToString();
}
return sCar; // Car_1
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
萤火虫中的'd'来自哪里?
如何基于我的db构建'JSON-style'"字符串"以返回到jquery ajax函数?
理想情况下,我希望jquery ajax数据看起来像这样:
{"TotalCars": x, "CarList":[{"CarName":"x1", "CarID":"id1"},{"CarName":"x2", "CarID":"id2"}]}
Run Code Online (Sandbox Code Playgroud)
那么使用jquery我可以做类似alert(data.TotalCars);
的东西和所有那些东西.
请记住,我是非常新的,所以我感谢您提供的任何帮助.先感谢您!<3
Web服务框架使用"d"来确保服务永远不会返回裸数组.这样做是为了解决潜在的跨站点Javascript漏洞.
您希望创建描述数据协定的类,例如:
[DataContract]
public class CarCollection {
[DataMember]
public int TotalCars { get { return CarList.Count; }}
[DataMember]
public List<Car> CarList { get; set; }
}
[DataContract]
public class Car {
[DataMember]
public string CarName { get; set; }
[DataMember]
public string CarId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您将使用这些类构建返回值.您还可以告诉WCF接受具有该WebGet
属性的响应的HTTP GET方法和JSON序列化:
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetCar()
{
// You will probably build this up from your databas
var cars = new CarCollection { CarList = new List<Car>() {
new Car { CarName = "x1", CarId = "id1" },
new Car { CarName = "x2", CarId = "id2" },
new Car { CarName = "x3", CarId = "id3" },
}};
return cars;
}
Run Code Online (Sandbox Code Playgroud)
WCF将自动将对象图序列化为JSON并将其发送回客户端.
然后,您还可以使用简化的JQuery方法get
:
$("#btnGet").click(function () {
$.get("TimeService.svc/GetCar", function(data){
alert(data);
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17161 次 |
最近记录: |