2013-05-14 2 views
0

좋아, 여기에 내가 뭘하려고 오전, 나는 활성 디렉토리에서 모든 사용자를 얻으려면 목록에 넣어, 그래서 내가 아약스에서 웹 서비스를 호출하는 모든 사용자를 얻으려면 목록 문자열을 넣어, 그리고 나중에 내가 jquery 자동 완성 텍스트 상자에 내가 전에 가지고있는 사용자의 목록에 사용하고 싶습니다.ajax에서 웹 서비스를 제대로 호출하는 방법은 무엇입니까?

$(document).ready(function() { 

      // Load data then initialize plugin: 
      $.ajax({ 
       url: '/SvcADUser.asmx/GetADUserList', 
       dataType: 'json' 
      }).done(function (source) { 

       var countriesArray = $.map(source, function (value) { return { value: value }; }), 
        countries = $.map(source, function (value) { return value; }); 

       // Setup jQuery ajax mock: 
       $.mockjax({ 
        url: '*', 
        responseTime: 200, 
        response: function (settings) { 
         var query = settings.data.query, 
          queryLowerCase = query.toLowerCase(), 
          suggestions = $.grep(countries, function (country) { 
           return country.toLowerCase().indexOf(queryLowerCase) !== -1; 
          }), 
          response = { 
           query: query, 
           suggestions: suggestions 
          }; 

         this.responseText = JSON.stringify(response); 
        } 
       }); 



       // Initialize autocomplete with local lookup: 
       $('#MainCT_dtvJobVac_PIC').autocomplete({ 
        lookup: countriesArray, 
        onSelect: function (suggestion) { 
         $('#selection').html('You selected: ' + suggestion.value + ', ' + suggestion.data); 
        } 
       }); 

      }); 

     }()); 

    }()); 

을하지만 내가 SvcADUser.asmx에 URL을 변경하는 경우, 그것은 오류를주고 있지만, 나에게 어떤 결과를 제공하지 않습니다, 나에게 오류, "NetworkError: 500 Internal Server Error - http://localhost:60525/SvcADUser.asmx/GetADUserList"을 던져 :

이 내가하는 일입니다.

내가 뭘 잘못 했니?

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 
    public class SvcADUser : System.Web.Services.WebService 
    { 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     [WebMethod] 
     public List<string> GetADUserList(string keyword) 
     { 
      List<string> alluser = new List<string>(); 

      using (var context = new PrincipalContext(ContextType.Domain, "weekendinc.com")) 
      { 
       using (var searcher = new PrincipalSearcher(new UserPrincipal(context))) 
       { 
        foreach (var result in searcher.FindAll()) 
        { 
         DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry; 

         alluser.Add((string)de.Properties["samAccountName"].Value); 
        } 
       } 
      } 

      var filtereduser = alluser.Where(usr => usr.ToLower().StartsWith(keyword.ToLower())); 

      return filtereduser.ToList(); 
     } 

    } 
+0

시도 : BTW 여기 내 웹 서비스 코드는? –

+0

아니요, 내 asmx 파일이 오류를 반환하지 않았으므로 잘 작동합니다. 사용자 목록을 반환합니다. – NomNomNom

+0

웹 서비스가 작동 중입니다. 시도하고 아약스에 성공과 오류를 넣어. 당신이 response.d를 잡아서 그것으로부터 데이터를 검색 할 수 있는지보십시오. 나는 그것을 당장 제대로 풀기 위해 고생했다. 그래서 나는 [블로그 게시물] (http://wimombelets.blogspot.be/2013/03/consuming-aspnet-web-services-with-ajax.html)을 작성했다. 나는 그것을 잊지 않을 것입니다. 아마 당신은 그것을 사용할 수있을 것입니다. 어떤 이유로 코드가 작동하는 –

답변

0

는 디버그에 ASMX 파일을 실행하고 수동으로 키워드를 입력하면 화면 출력/오류가 무엇이

jQuery.ajax({ 
      type: 'POST', 
      contentType: 'application/json;', 
      data: '{keyword:"test"}', 
      dataType: 'json', 
      async: true, 
      url: 'SvcADUser.asmx/GetADUserList', 
      success: function (result) { 
       alert(result.d); 
      } 
     }); 
+0

은 JQuery 문이 .ajax보다 먼저 나오기 때문입니까? – NomNomNom

+0

나는 키포인트가 다음과 같다고 생각한다 : (1.) url이 정확한지 확인한다. (2.) 메쏘드 GetADUserList (string keyword)는 param 'keyword', 을 가지므로 다음과 같이 데이터를 게시해야합니다 :> data : '{keyword : "test"}' – HenryChuang

관련 문제