如何从jQuery/ajax将参数传递给[OperationContract] webservice方法?
我想从jquerys ajax将参数传递给我的webservice。我怎样才能做到这一点?如何从jQuery/ajax将参数传递给[OperationContract] webservice方法?
我已经浏览了一些相关的问题,但找不到适用于我的解决方案。我试过这个:jQuery AJAX parameter not being passed to MVC但我没有使用mvc,所以我确信这就是解决方案无法正常工作的原因。 我的jQuery看起来是这样的:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "CarService.svc/GetCar",
data: {CarID:117},
dataType: "json",
success: function (data) {
$("#lblCurrentTime").text("");
$("#lblCurrentTime").text(data.d.CarID);
}
});
某处有问题,我的“数据”部分,正确吗?如果离开数据:部分数据:“{}”我可以让我的方法运行(我不传递任何参数),但现在我尝试了上面出萤火虫告诉我:
Firebug's log limit has been reached. 0 entries not shown. Preferences
POST http://localhost:64461/TimeService.svc/GetCar
POST http://localhost:64461/TimeService.svc/GetCar
500 Internal Server Error
1.12s
我Web服务是这样的:
[OperationContract]
public CarTable GetCar(int id)
{
using (var sqlc = new SqlConnection(@"sdfgsdfg"))
{
sqlc.Open();
var cmd = sqlc.CreateCommand();
cmd.CommandText = "HUGE QUERY HERE ^^";
//id = 117;
cmd.Parameters.Add("CarID", System.Data.SqlDbType.Int).Value = id;
using (var reader = cmd.ExecuteReader())
{
CarTable Cars = new CarTable();
while (reader.Read())
{
Cars.CarID = reader["CarID"].ToString();
Cars.CarName = reader["CarName"].ToString();
}
return Cars;
}
}
}
[DataContract]
public class CarTable
{
[DataMember]
public string CarID { get; set; }
[DataMember]
public string CarName { get; set; }
}
编辑:如果我更改数据部分:
data: CarID=117,
我得到Sys.ParameterCountException:参数数量不匹配。 [打破这个错误] {名:“格式”,类型:字符串}
首先,你应该确认是否包括属性
[WebInvoke (ResponseFormat = WebMessageFormat.Json)]
到GetCar
方法或做同样在web.config中。
其次,您应该使用data:"117"
或data:JSON.stringify(117)
而不是data: {feat:117}
。
更新:如果您将有一个更复杂的数据输入,例如作为对象CarTable
data
参数应为data:JSON.stringify({CarID: 117, CarName: "BMW"})
,所以它应该以相同的方式构建。 JSON.stringify
在http://www.json.org/js.html中定义。
还有一句话。在成功返回数据后,您将看到返回的数据不应与data.d.CarID
访问,而应与data.CarID
访问。 ASMX网络服务将数据放置在属性d
中,但不包含WCF服务。
UPDATED 2:我不知道你做了哪个小错误,所以我创建了一个小WCF服务,它可以满足你的需求。你可以在这里下载源代码http://www.ok-soft-gmbh.com/jQuery/WcfData.zip。为了确保您能够编译它,我使用了Visual Studio 2008.在Visual Studio 2010中,web.config文件可以更加简单。
我认为参数名称需要与服务上的调用相匹配。
尝试改变
data: {CarID:117},
只是 data: {ID:117},
data: {CarID:117},
应该是:
data: "{'id':'117'}",
的数据参数必须是一个字符串。名称和值对需要引用为有效的JSON。名称/值对的名称应该与Web服务的输入参数匹配。
尝试改变
data: {CarID:117},
只是data: {id:117},
您是否可以用像了SoapUI工具打电话给你的web服务? – 2010-12-08 22:54:26
您是否尝试过“完成”而不是成功,并看到错误消息是什么? – Matrym 2010-12-08 23:06:33
我对这个工具并不熟悉,但现在我会查看它。 – Robodude 2010-12-08 23:07:02