Mam następującą usługę internetową;
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
Jest to standard magazynowy bez zmian w klasach dekoratorów.
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);
}
});
Jest to akcja wysyłania, ponieważ później muszę przesłać do niej dane.
Kiedy wykonuję jQuery, zwracany jest błąd „Brak transportu”.
Powinienem również wspomnieć, że jQuery jest przechowywany w prostym pliku HTML na moim komputerze, a usługa WebService również działa na moim komputerze.
Na stronie HTML nie ma kodu, to po prostu strona internetowa, a nie projekt ac # ani cokolwiek.
Czy ktoś może mi tutaj wskazać właściwy kierunek?
jquery
ajax
web-services
griegs
źródło
źródło
Odpowiedzi:
Jeśli Twoja strona jQuery nie jest ładowana od
http://localhost:54473
tego czasu, problem prawdopodobnie wynika z tego, że próbujesz wykonać żądanie międzydomenowe.Aktualizacja 1 Spójrz na ten wpis na blogu .
Aktualizacja 2 Jeśli rzeczywiście jest to problem (i podejrzewam, że tak), możesz chcieć sprawdzić JSONP jako rozwiązanie. Oto kilka linków, które mogą pomóc w rozpoczęciu:
źródło
Dodaj:
jQuery.support.cors = true;
Umożliwia cross-site scripting w jQuery (chyba po 1.4x).
Używaliśmy naprawdę starej wersji jQuery (1.3.2) i zamieniliśmy ją na 1.6.1. Wszystko działało, z wyjątkiem wywołań .ajax (). Dodanie powyższej linii rozwiązało problem.
źródło
Na stronie wystąpił ten sam błąd i dodałem te wiersze:
i wreszcie u mnie działa;) koniec z błędami w IE9.
źródło
Żadna z proponowanych odpowiedzi nie pomogła mi całkowicie. Mój przypadek użycia jest nieco inny (wykonanie AJAXa w celu uzyskania dostępu do pliku S3 .json w IE9). Oprawa
jQuery.support.cors = true;
pozbyło sięNo Transport
błędu, ale nadal otrzymywałemPermission denied
błędy.U mnie zadziałało użycie jQuery-ajaxTransport-XDomainRequest, aby zmusić IE9 do korzystania z XDomainRequest. Korzystanie z tego nie wymagało ustawienia
jQuery.support.cors = true;
źródło
rozwiązuję to, używając dataType = 'jsonp' w miejscu dataType = 'json'
źródło
Ja również napotkałem ten problem i wszystkie powyższe rozwiązania zawiodły lub nie miały zastosowania z powodu ograniczeń usług sieciowych klienta.
W tym celu dodałem element iframe na mojej stronie, który znajdował się na serwerze klienta. Kiedy więc publikujemy nasze dane w elementach iframe i iframe, umieszczamy je w usłudze sieciowej. W związku z tym odsyłacze międzydomenowe są wyeliminowane.
Dodaliśmy dwukierunkową kontrolę pochodzenia, aby potwierdzić, że tylko autoryzowane strony publikują dane do iz elementu iframe.
Mam nadzieję, że to pomoże
źródło
Dla mnie to zupełnie inna historia.
Ponieważ ta strona ma dobry ranking w wyszukiwarkach, powinienem dodać tutaj moją sprawę i rozwiązanie.
Zbudowałem
jquery
się,webpack
wybierając tylko moduły, których używam. Ajax zawsze kończy się niepowodzeniem, a jedyną wskazówką jest komunikat „No Transport”.Po długim debugowaniu okazuje się, że problem
XMLHttpRequest
jest możliwy do podłączeniajquery
i domyślnie nie obejmuje.Musisz jawnie dołączyć
jquery/src/ajax/xhr
plik, aby Ajax działał w przeglądarkach.źródło
Rozwiązałem to po prostu usuwając domenę z adresu URL żądania.
źródło