我有一个使用WCF REST服务模板40创建的WCF REST服务。我可以使用Fiddler成功获取JSON响应,但我无法使用jQuery ajax调用获得响应。请求每次都会中止。
在WCF方面,这是有问题的方法:
[WebInvoke(UriTemplate = "GetMedicalEntities", Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
public IEnumerable<MedicalEntityResult> GetMedicalEntities(MedicalEntityRequest request)
{
if (WebOperationContext.Current.IncomingRequest.Method == "OPTIONS")
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Accept");
return null;
}
else
{
IEnumerable<MedicalEntity> matchingMedicalEntities =
LTSTest_DataAccess.GetMedicalEntitiesWithName(request.FirstPartOfName);
IEnumerable<MedicalEntityResult> medicalEntityResults =
matchingMedicalEntities.Select(m => new MedicalEntityResult
{
HospitalName = m.EntityName,
//Address = m.Addresses.Where(a => a.AddressTypeId == 1).FirstOrDefault().Address1
}).ToList();
return medicalEntityResults;
}
}
您会注意到我正在检查使用“OPTIONS”方法的请求。我认为这可能是我阅读后的问题的一部分: Problem sending JSON data from JQuery to WCF REST method
以下是我的服务类的属性,btw:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
// NOTE: If the service is renamed, remember to update the global.asax.cs file
public class CreditAuthRESTService
{
请求主体需要格式化(这至少在Fiddler中有效):
{"FirstPartOfName":"Med "}
以下是我们尝试使用该服务的客户端测试代码:
<script type="text/javascript">
$(document).ready(function() {
$("#txt_search").keyup(function()
{
var search;
search = $("#txt_search").val();
if (search.length > 2)
{
event.preventDefault();
// Trigger AJAX request
$.ajax(
{
type: "POST",
url: "XXXXXXXXXXXX",
dataType: 'json',
contentType: 'application/json charset UTF-8',
data: '{"FirstPartOfName":"' + search + '"}',
success: function(message) {
if (message.length > 0)
{
alert('It got data back....');
message = "Do you mean: " + message;
$("#suggest").append(message);
}
else
{
alert('Nothing came back....');
}
}
} );
}
else
{
// Empty suggestion list
$("#suggest").empty();
}
});
});
这样做的想法是实现自动完成功能,以便用户可以看到名称以已输入的字符开头的医疗实体的集合。
我们在阅读了这篇文章的第二个答案后,在Ajax请求之前插入了event.PreventDefault():Firebug 1.5 showing 200 Aborted for Ajax requests
然而,它没有任何区别。再一次,所有请求都被中止。有人会对可能发生的事情有所了解吗?如有必要,我可以包含更多客户端或服务端详细信息。