我想从jquerys ajax将参数传递给我的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);
}
});
我的'数据'部分有问题,对吗?如果保留数据:part作为数据:“{}”我可以让我的方法运行(我没有传递任何参数)但是当我尝试上面的firebug时,我告诉我:
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:参数计数不匹配。 [Break On此错误] {name:“format”,type:String}
答案 0 :(得分:2)
首先,您应该验证是否包含属性
[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 Web服务将数据放在属性d
中,但不放置在WCF服务中。
更新2 :我不知道你做了哪个小错误,所以我创建了一个小型WCF服务,可以满足您的需求。您可以在此处下载源代码http://www.ok-soft-gmbh.com/jQuery/WcfData.zip。为了确保您能够编译它,我使用了Visual Studio 2008.在Visual Studio 2010中,web.config文件可以更加简单。
答案 1 :(得分:2)
data: {CarID:117},
应该是:
data: "{'id':'117'}",
data参数必须是字符串。需要引用名称和值对作为有效的JSON。名称/值对的名称应与Web服务的输入参数匹配。
答案 2 :(得分:1)
尝试更改
data: {CarID:117},
到data: {id:117},
答案 3 :(得分:0)
我认为参数名称需要与服务上的呼叫相匹配。
尝试更改
data: {CarID:117},
到了
data: {ID:117},