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?
Author: Joachim Sauer, 2011-03-09

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ął:

 95
Author: no.good.at.coding,
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.

 251
Author: SrBlanco,
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.

 26
Author: bsuttor,
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;

 7
Author: rynop,
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'

 6
Author: Abhishek,
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);
}
 0
Author: Riju Mahna,
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
 -1
Author: Draghon,
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