2012-11-08 5 views
0

Jquery를 처음 사용했습니다. aspx 페이지에 텍스트 상자가 있습니다. 2자를 입력하면 텍스트 상자에서 jquery ajax를 사용하여 SQL 서버 데이터베이스에서 Turkey Postcodes를 가져옵니다. 그러나 SQL 서버에서 900 개가 넘는 레코드가 반환되면 jquery는 "내부 서버 오류"를 발생시킵니다. 나는 그것이 텍스트 박스에 데이터를 가져 오는 데 더 많은 시간이 필요하다고 생각하지만, jquery는 그것을 허용하지 않고 내부 에러를 준다. 이제 첫 번째 요청시 부분 데이터를 가져 오려고합니다. 예를 들어; 사용자가 텍스트 상자에 34를 쓰면 AJAX는 34로 시작하는 모든 데이터를 가져 오지 않습니다. 그러면 처음 100 개의 결과가 나타납니다. 그런 다음 사용자가 스크롤 막대를 레코드 끝까지 밀면 새 레코드가 쿼리되어 사용자에게 표시됩니다. 페이스 북과 똑같은거야. 가능하니? 그렇다면 샘플 코드를 공유하면 기쁩니다. 여기 aspx.cs 뒤에 Jquery Ajax를 사용하여 부분 데이터 가져 오기

$(function() { 
$(".tb").autocomplete 
     ({ 
      source: function(request, response) { 
       $.ajax({ 
        type: "POST", 
        url: "WebService_GetData.asmx/GetCmbPostaKod", 
        dataType: "json", 
        //data: "{ 'filterKey': '" + request.term + "','select1': '" + $('#cmbLogisticType').val() + "' }", 
        data: JSON.stringify({filterKey: request.term, lojtype:$('#cmbLogisticType').val(), ulke:$asp('ulke').val()}), 
        contentType: "application/json; charset=utf-8", 
        dataFilter: function(data) { return data; }, 
        success: function(data) { 
         response($.map(data.d, function(item) { 
         return { value: item.PostaKodu, label: item.SemtAdi + '/' + item.IlceAdi + '/' + item.IlAdi + ' - ' + item.PostaKodu } 
         })) 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
         alert(errorThrown); 
        } 
       }); 
      }, 
      minLength: 2, 
      multiple: true, 
      matchContains: true, 
      formatItem: formatItem, 
      formatResult: formatResult 
     }); 
    }); 

코드

[WebMethod] 
    public List<PostaKod> GetCmbPostaKod(string filterKey, string lojtype, string ulke) 
    { 

     string stmt; 
     DataTable dt; 
     //myToolKit.AddValueToCombo(cmbVergiDairesi, "0", "Seçiniz"); 
     //myToolKit.AddValueToCombo(cmbSatisElemani, "0", "Seçiniz"); 
     FunctionsToolkit.InjectionKontrolEt(ref filterKey); 
     mySqlKit.DoConnect(); 
     /* 
     stmt = string.Format(@"SELECT ILADI, ILCEADI, SEMTADI, POSTAKODU, ULKEKODU FROM TBLPOSTAKODLARI (NOLOCK) 
           WHERE POSTAKODU LIKE '{0}%' AND ULKEKODU='{1}' ORDER BY POSTAKODU", filterKey, (lojtype=="3")?ulke:lojtype); 
     */ 
     stmt = string.Format(@"EXEC sp_get_postakodu '{0}','{1}'",filterKey,(lojtype=="3")?ulke:lojtype); 
     dt = mySqlKit.DoDTstr(stmt); 
     mySqlKit.DoDisconnect(); 
     return mySqlKit.ComboDList(dt); 
    } 

페이지 영문 자바 스크립트

내 코드 ..

입니다

<div id="panel1"> 
     Nakliye Tipini Seçiniz* : 
     <select name="LogisticType" id="cmbLogisticType" onchange="toggle(this.value)"> 
      <option value="1" selected="selected"> Seçiniz </option> 
      <option value="90"> Şehiriçi </option> 
      <option value="90"> Şehirlerarası </option> 
      <option value="3"> Uluslararası </option> 
     </select> 
     <!-- 
     <asp:DropDownList ID="cmbPostaKodu" name="cmbPostaKodu" runat="server" class="combo"> 
     </asp:DropDownList> 
     <select ID="cmbIl" name="cmbIl" runat="server" onchange="ilceGetir(this.options[this.options.selectedIndex].value)" class="combo"></select> 
     <select ID="cmbIlce" name="cmbIlce" runat="server" class="combo"></select>--> 
    </div> 
    <div class="slidingDiv"> 
     <div class="slidingDiv2"> 
       Hareket Noktası (Ülke): 
       <div class="ui-widget"> 
        <div class="text1"> 
         <asp:TextBox ID="ulke" class="tb" runat="server" onfocus="this.value = (this.value == this.defaultValue) ? '' : this.value;return true;">Ülke Seçiniz</asp:TextBox> 
        </div> 
       </div> 

       Varış Noktası (Ülke): 
       <div class="ui-widget"> 
        <div class="text1"> 
         <asp:TextBox ID="ulke2" class="tb" runat="server" onfocus="this.value = (this.value == this.defaultValue) ? '' : this.value;return true;">Ülke Seçiniz</asp:TextBox> 
        </div> 
       </div> 
     </div> 
     Hareket Noktası (Posta Kodu): 
     <div class="ui-widget"> 
      <div class="text1"> 
       <asp:TextBox ID="city" class="tb" runat="server" onfocus="this.value = (this.value == this.defaultValue) ? '' : this.value;return true;">Posta Kodu Giriniz</asp:TextBox> 
      </div> 
     </div> 
     Varış Noktası (Posta Kodu): 
      <div class="ui-widget"> 

      <div class="text1"> 
       <asp:TextBox ID="city2" class="tb" runat="server" onfocus="this.value = (this.value == this.defaultValue) ? '' : this.value;return true;">Posta Kodu Giriniz</asp:TextBox> 
      </div> 
     </div> 
    </div> 

답변

0

당신이 제한하는 것을위한 가장 쉬운 방법은 당신의 TOP n을 사용하여 설정된 서버 측 쿼리 결과 (SQL을 사용한다고 가정) 섬기는 사람). n에 맞는 숫자를 입력하십시오. 어떤 사용자도 900 가지 옵션을 찾아 볼 수 없습니다. 20이라고 말하십시오.

사용자가 더 많은 옵션을 원하면 더 많은 타이핑이 필요합니다.

+0

감사합니다. 나에게 좋은 해결책이 아닙니다. 사용자는 우편 번호를 아래로 스크롤하면 전체 데이터를 볼 수 있습니다. 데이터가 조각으로 나옵니다. 상위 n을 사용하여 제한 할 수 없습니다. –

+0

더 이상 제안 사항 ?? –

관련 문제