wywołanie jQuery do WebService zwraca błąd "No Transport"
Mam następujący serwis internetowy;
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
To standard, bez zmian w dekoratorach klasy.
Mam tą metodę 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);
}
});
To post action, ponieważ później muszę dodać do niego dane.
Gdy uruchamiam jQuery, zwracany jest błąd "Brak transportu".
Należy również wspomnieć, że jQuery jest przechowywany w prostym pliku HTML na moim komputerze i WebService działa również na moim komputerze.
Jest brak kodu na stronie HTML to po prostu Strona WWW, a nie Projekt c# czy coś.
Czy ktoś może mi wskazać właściwy kierunek?7 answers
Jeśli Twoja strona jQuery nie jest ładowana z http://localhost:54473
, to prawdopodobnie ten problem wynika z tego, że próbujesz wysłać żądanie między domenami.
Update 1 Spójrz na ten wpis na blogu .
Update 2 Jeśli rzeczywiście jest to problem (i podejrzewam, że jest), możesz sprawdzić JSONP jako rozwiązanie. Oto kilka linków, które mogą pomóc ci uzyskać rozpoczął:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 17:42:05
Dodaj to: jQuery.support.cors = true;
Umożliwia skrypty w jQuery (wprowadzone po 1.4 x, jak sądzę).
Używaliśmy bardzo starej wersji jQuery (1.3.2) i zamieniliśmy ją na 1.6.1. Wszystko działało, poza tym .wywołania ajax (). Dodanie powyższej linii naprawiło problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-01 15:40:25
Miałem ten sam błąd na stronie i dodałem te linie:
<!--[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]-->
I w końcu mi działa;) koniec z błędami w IE9.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 21:10:39
Żadna z proponowanych odpowiedzi nie zadziałała całkowicie dla mnie. Mój przypadek użycia jest nieco inny (robi ajax dostać się do S3 .plik json w IE9). Ustawienie jQuery.support.cors = true;
pozbyło się błędu No Transport
, ale wciąż otrzymywałem błędy Permission denied
.
Zadziałało dla mnie użycie jQuery-ajaxTransport-XDomainRequest aby zmusić IE9 do użycia XDomainRequest. Użycie tego nie wymagało ustawienia jQuery.support.cors = true;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 16:22:54
Rozwiązuję to używając dataType= 'jsonp' w miejscu dataType= 'json'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-13 07:30:50
Ja też mam ten problem i wszystkie rozwiązania podane powyżej albo zawiodły, albo nie miały zastosowania ze względu na ograniczenia obsługi klienta.
W tym celu dodałem ramkę iframe na mojej stronie, która znajdowała się na serwerze klienta. Więc kiedy publikujemy nasze dane do iframe i iframe następnie publikuje je do webservice. W związku z tym eliminowane jest odwoływanie się między domenami.
Dodaliśmy dwukierunkową kontrolę pochodzenia, aby potwierdzić tylko autoryzowane wpisy strony do iz ramki iframe.
Hope it pomaga
<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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-17 17:03:39
Rozwiązałem to po prostu usuwając domenę z adresu URL żądania.
Before: https://some.domain.com/_vti_bin/service.svc
After: /_vti_bin/service.svc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 19:29:05