WebService에 대한 jQuery 호출이 "전송 없음"오류를 반환 함


163

다음 웹 서비스가 있습니다.

    [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 # 프로젝트 또는 아무것도 아닙니다.

누구든지 올바른 방향으로 나를 가리킬 수 있습니까?


브라우저 만 사용하여 웹 서비스를 이용할 수 있습니까?
Avitus

죄송합니다,이 게시물이 다른 게시물이라는 것을 알지 못했습니다 (이 게시물을 편집하여 내 게시물이라고 생각했습니다). 내 게시물에서이 게시물의 하이퍼 링크를 클릭해야합니다. 게시물 소유자에게 정말 죄송합니다 = \
Erick Garcia

$ .support.cors = true; 엔드 포인트가 CORS를 사용하는 경우 (Access-Control-Allow-Origin 헤더 등으로 올바르게 응답하는 경우)이 코드 행은 jQuery가 IE8에서 교차 원점 요청을 수행하도록 설득합니다. 방금 시간과 두통을 덜어주기를 바라고이 문제에 부딪 쳤습니다.
Jeremy Hert

답변:


95

jQuery 페이지가로드되지 않은 http://localhost:54473경우이 문제는 도메인 간 요청을하려고하기 때문일 수 있습니다.

업데이트 1 이 블로그 게시물을 살펴보십시오 .

업데이트 2 이것이 실제로 문제인 경우 (그리고 문제가 의심되는 경우) 솔루션으로 JSONP를 체크 아웃 할 수 있습니다. 시작하는 데 도움이되는 몇 가지 링크는 다음과 같습니다.


4
예, 아마도 보안과 관련이있을 것입니다.
thenengah

3
localhost : 54473 일 필요는 없으며 동일한 도메인이어야합니다.
jcolebrand

7
@drachenstern 흠, 나는 항상 체계, 호스트 포트가 동일해야한다고 생각했습니다. 이것이것 그리고 이것은 같은 영역을 구성하는 것에 대한 나의 생각을지지하는 것 같습니다.
no.good.at.coding

@drachenstern 도움을 주셔서 감사합니다! 이 모든 웹 내용은 까다로워-매일 배울 새로운 것 :)
no.good.at.coding

1
@griegs 잘 들리지만 실제로 문제를 해결하지는 않는다는 점에주의하십시오. jQuery가 적용한 안전 장치 만 제거하기 때문에 환경에서 도메인 간 요청을 허용하는 경우에만 작동합니다. 브라우저에서 허용하지 않는 경우이 속성을 설정하면 아무런 효과가 없습니다. JSONP를 사용하기 위해 약간의 노력을 기울이는 것이 좋습니다. 최소한 jQuery 도메인 간 지원을 지원하려는 모든 브라우저에서 작동하는지 확인하고 싶을 수도 있습니다. 또한 나중에 발생할 수 있는 다른 문제 에 대해서는 언급 할 수 없습니다 !
no.good.at.coding

253

이거 추가 해봐: jQuery.support.cors = true;

jQuery에서 크로스 사이트 스크립팅을 가능하게합니다 (1.4x 이후에 도입되었습니다).

우리는 정말 오래된 버전의 jQuery (1.3.2)를 사용하여 1.6.1로 교체했습니다. .ajax () 호출을 제외한 모든 것이 작동했습니다. 위의 줄을 추가하면 문제가 해결되었습니다.


좀 더 자세한 정보는 여기 : blueonionsoftware.com/…
Andrew Arnott

14
이 문제는 크롬과 파이어 폭스에서는 작동하지만 IE에서는 작동하지 않습니다. 내 스크립트의 상단에 이것을 추가하고 모두 좋았다
피터

@SrBlanco이 정보를 공유해 주셔서 감사합니다.
dev

4
아주 좋은 수정, 상대 경로를 사용하여 같은 도메인에서 kml 파일을 요청할 때 Internet Explorer 9에서 동일한 문제가 발생했습니다 ... IE의 신비 ...
Matteo Conta

감사. 예, 1.5 jquery 업데이트 후 나머지 통화가 중지되었습니다. 이 코드는 그것을 고쳤다.
ashraf

26

페이지에서 동일한 오류가 발생했으며 다음 줄을 추가했습니다.

<!--[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에서 더 이상 오류가 없습니다.


6
GitHub의 프로젝트 : github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest 및 XDomainRequest 정보 : blogs.msdn.com/b/ieinternals/archive/2010/05/13/... . 기본적으로 IE8 및 IE9는 XMLHttpRequest 객체에서 CORS를 지원하지 않습니다. 대신 XDomainRequest 객체를 사용해야합니다 (더 제한적입니다. 두 번째 링크에서 정보를 읽을 수 있음).
richardaday

7

제안 된 답변 중 어느 것도 나를 위해 완전히 효과가 없었습니다. 내 유스 케이스는 약간 다릅니다 (아약스는 IE9의 S3 .json 파일을 가져옵니다). 설정 jQuery.support.cors = true;에서 No Transport오류 가 제거 되었지만 여전히Permission denied 오류 발생했습니다.

나를 위해 일한 것은 IE9가 XDomainRequest 를 사용하도록 jQuery-ajaxTransport-XDomainRequest 를 사용하는 것이 었습니다. 이것을 사용하면 설정이 필요하지 않았습니다jQuery.support.cors = true;


6

dataType = 'json'대신 dataType = 'jsonp'를 사용하여 해결합니다.


2
참고로, jsonp는 POST 동사를 지원하지 않고 GET 만 지원하므로 원래 포스터의 요청에는 실제로 작동하지 않습니다.
Daniel Cox

나중에 UR 좋아, 내가 구글, fbwall의 가져 오기 피드를 사용 + 등 아약스 사용
Abhishek

내 사용에 도움이 되었기 때문에 여전히 +1을 줄 것입니다. 감사합니다.
Manatherin

0

나도이 문제를 겪었고 위에 제공된 모든 솔루션이 실패했거나 클라이언트 웹 서비스 제한으로 인해 적용 할 수 없었습니다.

이를 위해 클라이언트 서버에 상주하는 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);
}

0

저에게는 완전히 다른 이야기입니다.
이 페이지는 검색 엔진 순위가 양호하므로 여기에 내 사례와 솔루션을 추가해야합니다.

나는 jquery나 자신을 지었다webpack 사용하는 모듈 만 골라서 . 단 하나의 단서로서 "전송 없음"메시지와 함께 아약스는 항상 실패합니다.

긴 디버깅 후 문제 XMLHttpRequest는 플러그 인 가능jquery 기본적으로 포함되지 않는 .

jquery/src/ajax/xhr브라우저에서 아약스가 작동하게하려면 파일 을 명시 적으로 포함시켜야 합니다.


-1

요청 URL에서 도메인을 제거하여 간단히 해결했습니다.

Before: https://some.domain.com/_vti_bin/service.svc

After: /_vti_bin/service.svc

1
예, 도메인에 URL이 지정되지 않은 jQuery 동일 도메인 아약스 요청. 필자의 경우 크로스 사이트 요청을 할 필요가 없었으며 ajax 요청의 url 매개 변수에 도메인이 있으면 요청이 크로스 사이트와 같은 방식으로 작동하는 것처럼 보입니다. 내 환경은 일부 리디렉션 규칙과 함께 Microsoft ForeFront를 사용하며 문제를 일으킬 수 있습니다.
Draghon

그렇다면 당신은 왜 크로스 도메인 아약스 요청에 대해 질문에 응답
합니까

1
@ NaeemShaikh27, 요청의 성격 (교차 도메인 대 동일 도메인)은 OP에서 명확하지 않았습니다. 질문에 "명백한"매개 변수가 주어지면 질문에 답했습니다. 어쨌든, 나는 단지 "이봐 요, 같은 오류가 있습니다. 여기 내가 한 일이 있습니다"라고 말하고 당신이 그것을 좋아하는지 아닌지 (또는 SO에 적합한 지 여부), 그것은 나를 위해 일했습니다. 이제 돌아가서 질문을 좀 더 구체적으로 만들면 내 답변이 완전히 관련이 없습니다.
Draghon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.