2011-10-10 7 views
0

프로젝트의 일부가 아닌 jQuery 파일에서 .NET 웹 서비스를 호출하고 있습니다. 서비스를 호출 할 때마다 OPTIONS /HOCWebService.asmx/HelloWorld가 표시되며 아무 것도 반환하지 않습니다. 무슨 일 이니? web.config에서 나는 웹 서비스가 httpGet과 httpPost가 허용되도록 지정했다.jQuery에서 .NET 웹 서비스 호출

UPDATE 1 :

$.ajax(

    { 
     type: "POST", 
     url: "http://127.0.0.1:8080/HOCWebService.asmx/HelloWorld", 
     data: "{}", 
     dataType: "json", 
     contentType: "application/json", 
     success: function (response) { 

      alert(response.d); 

      var categories = $.evalJSON(response.d); 


      for (i = 0; i < categories.length; i++) { 

       var span = $(document.createElement("span")); 
       $(span).addClass("ui-li-count"); 
       $(span).html(categories[i].Count); 
       var li = $(document.createElement("li")); 
       var anchor = $(document.createElement("a")); 
       $(anchor).attr("href", "/Home/detail/"+categories[i].Id); 
       $(anchor).html(categories[i].Title); 

       $(li).append(anchor); 
       $(li).append(span); 

       //  $("#categoriesListView").append('<li><a href="/Home/detail/' + categories[i].Id + '">' + categories[i].Title + '</a></li>'); 

       $("#categoriesListView").append(li); 

       // $(span).text(categories[i].Count); 

      } 

      $("#categoriesListView").listview('refresh'); 

     } 
    } 

    ); 
+0

$ .ajax() 호출에 코드를 추가 할 수 있습니까? –

+0

@StevendeSalas 코드가 추가되었습니다! – azamsharp

답변

2

.NET 프레임 워크에 ASMX 파일의 기본 구현은 SOAP 웹 서비스 다루고있어 보내고 XML wrapped in a SOAP envelope (그리고 JSON)을 받게 될 것을 의미합니다.

보십시오 : 당신은 '이 SOAPAction'을 호출하는 방법을 일치라는 HTTP의 POST 헤더를 필요 이상으로

$.ajax({ 
      // 1. Loose the 'HelloWorld' from the URL 
      url: "http://127.0.0.1:8080/HOCWebService.asmx", 
      type: 'POST', 
      async: false, 
      dataType: 'xml', 
      // 2. But add it as a HTTP Header called 'SOAPAction' 
      headers: { 
      SOAPAction: "http://www.tempuri.org/HelloWorld" 
      }, 
      contentType: 'text/xml; charset="utf-8"', 
      // 3. The data sent to the server must be a SOAP XML Envelope 
      data: '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + 
        '<soap:Body>' + 
         '<HelloWorld xmlns="http://www.tempuri.org/" />' + 
        '</soap:Body>' + 
       '</soap:Envelope>', 
      sucess: function(response) { 
       alert(response.responseText); 
       // Completion logic goes here 
      } 
    }); 

그렇지 않으면, 구현의 일환으로 유의하시기 바랍니다 실 거예요 작업 :

headers: { 
    SOAPAction: "http://www.tempuri.org/HelloWorld" 
}, 

POST 요청에 마지막 행선이 포함됩니다.

POST /HOCWebService.asmx HTTP/1.1 
Host: 127.0.0.1:8080 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: 453 
SOAPAction: "http://www.tempuri.org/HelloWorld" 

http://www.tempuri.org/은 새 ASMX 서비스를 만들 때 Microsoft에서 사용하는 기본 네임 스페이스이므로 구현시 사용중인 실제 네임 스페이스로 업데이트하십시오.

SUGGESTION :

당신은 내가 something similar to this approach를 사용하면 일반 처리기 (ASHX 파일)를 사용하여 제안 할 수 있습니다, 응용 프로그램에서 앞뒤로 JSON을 보낼 필요합니다.