jQuery Call to WebService возвращает ошибку "Нет транспорта"
У меня есть следующий веб-сервис;
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
Это стандартный стандарт без изменений для декораторов класса.
У меня есть этот метод jQuery;
var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
url: webMethod,
success: function(msg){ alert(msg.d); },
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
Это действие публикации, потому что позже мне нужно разместить на нем данные.
Когда я выполняю jQuery, я получаю сообщение об ошибке "Нет транспорта".
Следует также упомянуть, что jQuery хранится в простом HTML-файле на моем компьютере, и WebService также работает на моем компьютере.
На HTML-странице нет кода, это просто веб-страница, а не проект aC# или что-то еще.
Кто-нибудь может указать мне правильное направление здесь?
7 ответов
Если ваша страница jQuery не загружается из http://localhost:54473
тогда эта проблема, вероятно, из-за того, что вы пытаетесь сделать междоменный запрос.
Обновление 1 Посмотрите на это сообщение в блоге.
Обновление 2 Если это действительно проблема (и я подозреваю, что это так), вы можете проверить JSONP в качестве решения. Вот несколько ссылок, которые могут помочь вам начать:
Добавь это: jQuery.support.cors = true;
Он включает межсайтовый скриптинг в jQuery (я полагаю, после 1.4x).
Мы использовали действительно старую версию jQuery (1.3.2) и обменяли ее на 1.6.1. Все работало, кроме вызовов.ajax(). Добавление строки выше решило проблему.
У меня была такая же ошибка на странице, и я добавил эти строки:
<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->
и это, наконец, работает для меня;) больше нет ошибки в IE9.
Ни один из предложенных ответов полностью не работал для меня. Мой вариант использования немного отличается (выполнение ajax для получения файла S3 .json в IE9). настройка jQuery.support.cors = true;
избавился от No Transport
ошибка, но я все еще получал Permission denied
ошибки.
Что мне помогло, так это использование jQuery-ajaxTransport-XDomainRequest, чтобы заставить IE9 использовать XDomainRequest. Использование этого не требует настройки jQuery.support.cors = true;
Я решаю это с помощью dataType='jsonp' вместо dataType='json'
Я тоже получил эту проблему, и все решения, приведенные выше, либо потерпели неудачу, либо были неприменимы из-за ограничений клиентского веб-сервиса.
Для этого я добавил на свою страницу iframe, который находился на сервере клиента. Поэтому, когда мы публикуем наши данные в iframe, а iframe отправляет их в веб-сервис. Следовательно, междоменная ссылка исключается.
Мы добавили двустороннюю проверку происхождения, чтобы подтверждать только данные авторизованной страницы, размещаемые в и из iframe.
Надеюсь, поможет
<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
</iframe>
//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');
//The iframe receives the data using the code:
window.onload = function () {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
var origin = e.origin;
//if origin not in pre-defined list, break and return
var messageFromParent = JSON.parse(e.data);
var json = messageFromParent.data;
//send json to web service using AJAX
//return the response back to source
e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
}, false);
}
Для меня это совсем другая история.
Поскольку эта страница имеет хороший рейтинг в поисковых системах, я должен добавить сюда свой случай и решение.
я построил jquery
я с webpack
выбираю только те модули, которые использую. Ajax всегда терпит неудачу с сообщением "Нет транспорта" в качестве единственной подсказки.
После долгой отладки проблема оказывается XMLHttpRequest
подключается jquery
и не включается по умолчанию.
Вы должны явно включить jquery/src/ajax/xhr
файл, чтобы ajax работал в браузерах.
Я решил это просто, удалив домен из URL-адреса запроса.
Before: https://some.domain.com/_vti_bin/service.svc
After: /_vti_bin/service.svc