jQuery Ajax每次都发布到WCF REST服务ABORTED

时间:2011-12-15 01:39:00

标签: c# wcf rest jquery

我有一个使用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

然而,它没有任何区别。再一次,所有请求都被中止。有人会对可能发生的事情有所了解吗?如有必要,我可以包含更多客户端或服务端详细信息。

0 个答案:

没有答案