2

在传递两个参数时,我无法从 jquery 获得 WCF 调用。如果我稍微更改代码以仅通过一件事就可以了。

Javascript:

 $.ajax({
    type: "POST", //GET or POST or PUT or DELETE verb
    url: "/Services/JobNumberService.svc/GetActiveJobNumberByCustomerOrJointBilling", // Location of the service
    data: '{"customerId": "' + customerId + '", "departmentId": "' + departmentId + '"}', //Data sent to server
    contentType: "application/json; charset=utf-8", // content type sent to server
    dataType: "json", //Expected data format from server
    processdata: true, //True or False
    success: function (msg) {//On Successfull service call
        fillDropDownFromLookupList(msg, jobNumberDropDownId);

        prependItemToDropDown('', 'NONE', jobNumberDropDownId); //Add blank item to top of list
    },
    error: ServiceFailed// When Service call fails
});

服务签名:

public LookupList GetActiveJobNumberByCustomerOrJointBilling(int customerId, int departmentId)

这与我如何格式化传入的 json 格式有关。根据 JSONLint 它是有效的,但可能不是 .net 所期望的。

想法受到赞赏。

编辑

这就是我在回复中得到的

HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/11.0.0.0
Date: Thu, 28 Feb 2013 20:30:17 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Length: 0
Connection: Close

哦,我还试图关闭我的代码调试以追踪错误是什么,但由于某种原因我没有看到任何异常。

4

2 回答 2

5

您的服务将int值作为参数,但您发送的是字符串。如果customerIddepartmentId是数字,则需要删除它们周围的引号,以便将它们解释为数字。

'{"customerId": ' + customerId + ', "departmentId": ' + departmentId + '}'
于 2013-02-28T20:49:37.473 回答
4

根据您的评论,我相信您的问题可能是您试图将多个参数绑定到您的端点。我不是 WCF 专家,但我知道这在 WebAPI 中不起作用。

通常,解决方法是为您的绑定创建一个模型以解析为:

public class CustomerModel { 
    public int customerId; 
    public int departmentId; 
}

然后使您的调用的预期参数:

public LookupList GetActiveJobNumberByCustomerOrJointBilling(CustomerModel model)

现在您只需要从您提交的 JSON 对象周围删除引号,并且您的 AJAX 应该按原样工作,因为以下 JSON 对象将正确地反序列化为您的新CustomerModel对象:

{ "customerId": 1, "departmentId": 1 }

如果保留引号,您可能会得到错误的结果 - 因为解析器会将其接收的数据解释为字符串,而不是 JSON 对象。

于 2013-02-28T22:53:25.483 回答