2012-04-13 3 views
1

JQuery를 사용하여 AJAX를 로컬 서비스로 만듭니다. 내 로컬 서비스는 HttpHandler입니다 (예 : Request.ashx). Request.ashx에서 외부 웹 사이트 (예 : CallExternalWebsite())에 전화를 거는 것이 담당합니다. CallExternalWebsite()는 .NET의 System.Net.WebRequest()를 사용하여 요청을 시작합니다. 외부 웹 사이트에 액세스하면 성공 또는 오류 이벤트가 실행되지 않습니다. (참고 : 나는 또한 IIS에서 호스팅이 WCF 서비스를 시도 나는 같은 결과보고하고있다.) 여기Ajax 서비스 호출시 성공 이벤트가 발생하지 않습니다.

두 가지 시나리오입니다 :

이 시나리오가 작동 :이 ProcessRequest에서

  1. 을 (), 입니다. callExternalWebsite().
  2. 개체의 경우 데이터를 사용하여 결과를 시뮬레이트합니다.
  3. myButton을 클릭하십시오.
  4. 클라이언트에서 success 이벤트가 발생합니다.
  5. Fiddler에서 헤더 정보를 볼 수 있습니다. 나는이 시나리오가 작동하지 않는 등

, JSON 결과를 참조하십시오이 ProcessRequest에서

  1. 는(), callExternalWebsite의 전화를() 할 수 있습니다.
  2. 개체 o의 경우 callExternalWebsite()는 적절한 개체를 반환합니다.
  3. myButton을 클릭하십시오.
  4. 성공 이벤트 은 클라이언트에서이 실행되지 않습니다.
  5. Fiddler에서 헤더 정보를 볼 수 있습니다.
  6. 나는 내 전화로 결과를 보내고 있기 때문에 callExternalWebsite()가 작동하는 것을 알고 있습니다.

요약하면 HttpHandler 내의 외부 http 호출은 Ajax 성공 이벤트를 수행합니다. ,

public Void ProcessRequest(httpContent context) 
{ 
// Do some stuff.... 

// Make call to external web site 
object o = callExternalWebsite (Uri, Data, "POST"); 

// Return results from callOtherWebsite 
     JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); 
     string json = javaScriptSerializer.Serialize(o); 
     context.Response.ContentType = "application/json"; 
     context.Response.Write(json); 

} 

어떤 생각 (내가하려고했던 다른 interations)에 HttpHandler를 Request.ashx에서

$(document).ready(function() { 
     $("#myButton").click(function (event) { 

      $.ajax({ 
       cache: false, 
       type: "POST", 
       url: "http://localhost/Service/Request.ashx", 
       data: '{"id" : "053252f3"}', 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       timeout: 20000, 
       success: function (msg) { 
        AjaxSucceeded(msg); 
       }, 
       error: AjaxFailed 
      }); 
     }); 
    }); 

: 여기

는 AJAX 호출에서 조각인가?

감사합니다. 당신이 msg.d 대, MSG를 이렇게하면 어떻게됩니까

스티브

+1

당신은 응답이 OK/HTTP 200 하시겠습니까? 2xx의 상태 코드 만 "성공"이라고 생각합니다. –

+0

'AjaxSucceeded'에 코드를 게시 할 수 있습니까? 어쩌면 거기에 문제가있을 수 있습니다. success 호출을'alert ("hello!")'또는 비슷하게 변경하여 성공 분기가 실행 중이 아닌지 확인해보십시오. –

+0

나는 성공을 다음과 같이 변경했다 : 'success : function (msg) {alert ("hello"); }' 하지만 여전히 실행되지 않았습니다. 다음은 Request.ashx 호출의 응답입니다. HTTP/1.1 200 OK 캐시 제어 : 개인 콘텐츠 유형 : application/json; ASP.NET 날짜 : 2012 년 4 월 13 일 금요일 16:28:40 GMT Content-Type : 0- 문자열 : 길이 : 84' 모든 게 잘된 것 같습니다. – Steve

답변

0

:

$(document).ready(function() { 
    $("#myButton").click(function (event) { 

     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: "http://localhost/Service/Request.ashx", 
      data: '{"id" : "053252f3"}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      timeout: 20000, 
      success: function (msg) { 
       AjaxSucceeded(msg.d); 
      }, 
      error: AjaxFailed 
     }); 
    }); 
}); 
관련 문제