Я вызываю свою службу WCF, размещенную на локальном IIS, через jQuery, используя $.getJSON().
посмотрите мой код скрипта java
getTestRunsByProject: function (projectKey) {
var deferred = $.Deferred();
var link = scnfg.ServiceURL + '/GetTestRunsForProject/' + projectKey + '?callback=?';
$.getJSON(link, function (results) {
deferred.resolve(results);
});
return deferred.promise();
},
где я добавил? callback =? в конце URL-адреса службы, потому что я получал пустой ответ с кодом состояния 200 на вкладке консоли firebug с красным текстом; хотя сервис был функциональным.
когда url модифицируется строкой? callback =? то я не получаю запись вызова службы на вкладке консоли firebug, вместо этого я нашел данные вызова службы на вкладке Net вкладки firebug, которая содержит требуемый ответ от службы.
Я вызываю эту функцию со следующим кодом сценария
$.when(serviceapi.getTestRunsByProject("W6")).then(function (data) {
if (data.length > 0) {
lstTestRuns = data;
}
});
Теперь с? Callback =? он возвращает ответ на вызов службы, если он установлен на вкладке Firebug Net, но успешный обратный вызов $.getJSON не запускается, т.е. он не возвращает объект $.Deffered(). И есть путаница с использованием? Callback =? почему запись вызова сервиса не записывается на вкладке консоли firebug.
может ли кто-нибудь помочь в этом? Заранее спасибо.
С? Callback =? Я получал вызов перекрестного домена к моей службе, но с момента окончания службы я возвращал результат простого json-формата. Поэтому в этом случае клиент службы запрашивал данные в формате JSONP, где моя служба возвращала форматированные данные JSON. С предложением jfriend00 я искал, как реализовать механизм JSONP и нашел полезной эту ссылку.
Ссылаясь на эту ссылку, я узнаю, что мне нужно настроить привязку для моей конечной точки службы, чтобы разрешить вызов домена corss. Для этого я добавил следующую разметку в свой файл конфигурации службы
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJSONP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
и обновил мое определение конечной точки, чтобы использовать эту конфигурацию привязки следующим образом
<endpoint address="" binding="webHttpBinding" contract="IAuFaitDashboard" bindingConfiguration="webHttpBindingWithJSONP" behaviorConfiguration="MySetting">
Затем моя java-скрипт getTestRunsByProject запускает выполнение, как ожидалось.
$.getJSON()
возвращает объект, совместимый с обещанием, который автоматически разрешается или завершается с помощью вызова ajax.