JQuery Ajax сообщение в WCF REST Service отменяется каждый раз - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть служба WCF REST, которую я создал с помощью шаблона службы WCF REST 40. Я могу успешно получить ответ JSON с помощью Fiddler, но не могу получить ответ с помощью вызова 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". Я подумал, что это могло быть частью моей проблемы после прочтения этого: Ошибка отправки данных JSON из JQuery в метод REST WCF

Вот атрибуты для моего класса обслуживания, кстати:

 [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();
            } 
    });

});

Идея заключается в том, чтобы реализовать функцию автозаполнения, чтобы пользователи могли видеть коллекцию медицинских объектов, имена которых начинаются с введенных символов.

Мы вставили event.PreventDefault () непосредственно перед запросом Ajax после прочтения второго ответа на этот пост: Firebug 1.5, показывающий 200 прерванных для запросов Ajax

Однако это не имело значения. Еще раз, все запросы отменены. Будет ли у кого-нибудь представление о том, что может происходить? При необходимости я могу указать больше информации о клиенте или стороне службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...