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