如何从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:参数数量不匹配。 [打破这个错误] {名:“格式”,类型:字符串}

+0

您是否可以用像了SoapUI工具打电话给你的web服务? – 2010-12-08 22:54:26

+0

您是否尝试过“完成”而不是成功,并看到错误消息是什么? – Matrym 2010-12-08 23:06:33

+0

我对这个工具并不熟悉,但现在我会查看它。 – Robodude 2010-12-08 23:07:02

首先,你应该确认是否包括属性

[WebInvoke (ResponseFormat = WebMessageFormat.Json)] 

GetCar方法或做同样在web.config中。

其次,您应该使用data:"117"data:JSON.stringify(117)而不是data: {feat:117}

更新:如果您将有一个更复杂的数据输入,例如作为对象CarTabledata参数应为data:JSON.stringify({CarID: 117, CarName: "BMW"}),所以它应该以相同的方式构建。 JSON.stringifyhttp://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},