2010-01-07 3 views
3

까다로운 문제가 있습니다.jQuery를 사용하여 도메인 간 JSON을 ASP.NET에 게시

사용자가 키오스크에서 Google 사이트를 체크 아웃 할 때 영수증 출력을 허용해야하는 프로젝트를 진행 중입니다. 드라이버 및 서식 관련하여 Word에서 COM 자동화를 사용하여 영수증 출력을 처리합니다. 로컬 시스템에서 실행되는 웹 서비스에서이 코드를 래핑했습니다.

웹 서비스를 실행하는 로컬 시스템의 URL에 페이지 html에 간단한 jQuery ajax 호출을 넣는 것이 계획되었습니다. 이 ajax 호출에는 웹 서비스에서 직렬화되어 인쇄 된 주문의 json 객체가 포함되어 있습니다. localhost를 사용하면 잘 작동하지만, 프로덕션 환경에서는 Ajax 호출 규칙을 사용하지 않아도됩니다.

웹 사이트에서 실행중인 코드가 인쇄 서비스를 실행하는 로컬 웹 서비스에 접속할 수 없기 때문에 프록시가 작동하지 않습니다. 웹에서 파문을 한 후에 JSONP를 사용하는 것이 해결책 일 수 있다는 것을 알았지 만, 어떻게 작동시키는 지 알 수는 없습니다. 대부분의 자습서에서는 단순히 데이터를 게시하는 것이 아니라 원격 데이터를 얻으려고한다고 가정합니다. 인쇄 웹 서비스가 무효로 반환됩니다.

웹 서비스 (asmx)를 JSONP와 작동하도록 구성하려면 어떻게해야합니까? 내 jQuery 코드는 어떻게 생겼습니까? JSONP에

function printReceipt(data) { 
    $.ajax({ 
     type: "POST", 
     url: "http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson", 
     data: data, 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     error: function(xhr, msg) { alert(xhr.statusText); } 
    }); 
} 

모든 간단한 대안, 또는 내가 생각하지 않은 수있는 다른 가능한 해결책도 도움이 될 것입니다 : 현재는 다음과 같이 보입니다.

답변

8

JSONP는 script 태그를 head 섹션에 추가하기 만하므로 GET 요청에만 제한됩니다. JSONP를 처리하도록 ASMX 웹 서비스를 구성하기 위해 수동으로 직렬화를 처리해야합니다

[WebMethod] 
[ScriptMethod(UseHttpGet=true, ResponseFormat=ResponseFormat.Json)] 
public string Foo() 
{ 
    var json = new JavaScriptSerializer().Serialize(new 
    { 
     Prop1 = "some property", 
    }); 
    string jsoncallback = HttpContext.Current.Request["jsoncallback"]; 
    return string.Format("{0}({1})", jsoncallback, json); 
} 

그리고 클라이언트 측 : cross domain AJAX calls is to use Flash에 대한

$.getJSON("http://192.9.200.165/ContestWebService/Service1.asmx/PrintOrderReceiptJson?jsoncallback=?", 
    function(data) { 
     alert(data); 
    }); 

또 다른 대안을.

+0

일단 쿼리 문자열의 끝 부분에 보내려는 데이터를 던져 주셔서 감사합니다. – James

+0

고마워, 정말 도움이 됐어! –