Попытка получить данные из службы REST WCF в другом домене. Вот создание моей службы, которая кажется прекрасной и получает запрос с моим параметром и сигнатурой функции метки времени jQuery.
_Service = new WebServiceHost(myObject);
var binding = new WebHttpBinding() { CrossDomainScriptAccessEnabled = true };
var endpoint = _Service.AddServiceEndpoint(typeof(myObjectContract), binding, "http://localhost:8000/myObject_Service");
endpoint.Behaviors.Add(new WebHttpBehavior());
_Service.Open();
Вот вызов jQuery...
$.ajax({
url: "http://localhost:8000/myObject_Service/GetInterfaceInfo?interfaceId=1&callback=?",
crossDomain: true,
dataType: "jsonp",
success: function (data) {
alert(JSON.stringify(data));
}
}).fail(function (data, textStatus, errorThrown) {
alert(textStatus);
});
Я попытался форматировать данные несколькими способами, чтобы заставить его правильно разбираться, но я либо получаю сообщение об ошибке, что функция обратного вызова "не была вызвана", либо что существует "parsererror". Ниже приведена попытка, возвращающая строку в том формате, который люди предлагали на других сообщениях, но никаких данных никогда не происходит.
jQuery17106912882712204009_1384296559027({"data":"1","data":"2"})
Вот данные, которые отправляются из службы
public string GetInterfaceInfo(int interfaceId, string callback)
{
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(_I);
//Tried this below, also with no success.
//return string.Format("{0}({1})", callback, output);
}
Я не получаю никаких данных назад при моем вызове ajax, хотя он работает, хотя, потому что в вызове браузера. Я получаю все эти данные.
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
[{"Id":100,"Status":true,"Direction":"Inbound","Name":"Test_100","Sent":0,"Received":1000,"LastMessage":"2013-11-13 08:50:33.AM","Filtered":0,"CanRestart":true},{"Id":101,"Status":false,"Direction":"Inbound","Name":"Test_101","Sent":0,"Received":1000,"LastMessage":"2013-11-13 08:50:33.AM","Filtered":0,"CanRestart":true},{"Id":102,"Status":true,"Direction":"Inbound","Name":"Test_102","Sent":0,"Received":1000,"LastMessage":"2013-11-13 08:50:33.AM","Filtered":0,"CanRestart":true}]
</string>
Что случилось с моим призывом ajax?
Похоже, что это была проблема с атрибутом в моем контракте на обслуживание, это должен был быть ResponseFormat = WebMessageFormat.Json, хотя я думал, что JSON должен был быть типом по умолчанию.
jQuery17106912882712204009_1384296559027
вручную или это то, что jQuery говорит вашему серверу вернуть. Пока что все выглядит хорошо, кромеcrossDomain: true
, это не нужно, но не должноcrossDomain: true
сбой вашего запроса.