.JQuery .ajax如何用返回值调用WCF方法?

我已经能够使用.ajax调用WCF方法。 如何调用返回值的方法? 我需要调用此方法来查看数据是否已就绪,如果没有等待一秒钟。 WCF方法是:

[OperationContract] [WebGet] public bool IsDataReady(string requestGUID) { if (Global.publicDataDictionary.Keys.Contains(requestGUID)) return true; else return false; } 

到目前为止我的JavaScript是:

 $(document).ready(function() { var input = {requestGUID:""}; console.log(input); $.ajax({ url: "http://www.blah.com/services/TestsService.svc/IsDataReady", type: "GET", contentType: "application/json; charset=utf-8", data: input, dataType: "json", success: function(data) { } }); 

EDIT2:我将第二个ajax调用分解为一个方法但我的日志记录显示对第二个Web服务的调用从未传递requestGUID。 我不能使用相同的输入变量吗?

  var guid = ""; // var input = '{"SbiId":"' + guid + '"}'; // var input = {requestGUID:"ca222cf7-be5e-431a-ab93-9a31e8ae2f4a"}; function callUpdateGrid(input) { console.log(input); $.ajax({ url: "http://www.blah.com/services/TestsService.svc/GetContactsDataAndCountbyGUID", type: "GET", contentType: "application/json; charset=utf-8", data: input, dataType: "json", success: function (data) { var mtv = $find("").get_masterTableView(); console.log(data); mtv.set_dataSource(data.d.Data); mtv.dataBind(); } }); } function CallIsDataReady(input) { $.ajax({ url: "http://www.blah.com/services/TestsService.svc/IsDataReady", type: "GET", contentType: "application/json; charset=utf-8", data: input, dataType: "json", success: function (data) { if (!data) { setTimeout(function (inputInner) { CallIsDataReady(inputInner); }, 1000); } else { //Continue as data is ready callUpdateGrid(input); } } }); } $(document).ready(function () { var input = { requestGUID: "" }; CallIsDataReady(input); }); 

EDIT2:我将第二个ajax调用分解为一个方法但我的日志记录显示第二个Web服务的调用永远不会被调用:

 url: "http://www.blah.com/services/TestsService.svc/GetContactsDataAndCountbyGUID", else { //Continue as data is ready callUpdateGrid(input); } 

返回值将包含在传递给ajax调用中的成功回调设置的data参数中。

您需要检查此处的值,如果为false,则设置超时,到期时将再次尝试ajax调用。

将函数内部的Ajax调用包装起来是最好的IMO,你可以在超时到期时以递归方式调用它。 例如

  function CallIsDataReady(input){ $.ajax({ url: "http://www.blah.com/services/TestsService.svc/IsDataReady", type: "GET", contentType: "application/json; charset=utf-8", data: input, dataType: "json", success: function(data) { if (!data){ setTimeout(function(){CallIsDataReady(input);}, 1000); } else{ //Continue as data is ready } } }); } $(document).ready(function() { var input = {requestGUID:"<%=guid %>"}; console.log(input); CallIsDataReady(input); }); 

当您在此页面上查看源时:

 var input = {requestGUID:"<%=guid %>"}; 

在javascript中正确显示? 如果在IsDataReady方法中放置断点,您是否看到requestGUID是否有值? 您的服务与调用它的页面位于同一个域中吗?

编辑:在您的服务更改中: [WebGet]

 [WebGet( RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json] 

阅读RESTful Web服务: http : //www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide