2012-01-23 1 views
2

Я пытаюсь использовать автозаполнение jQuery для своих динамически созданных текстовых полей. это мой первый раз, работая с jQuery, поэтому я не настолько уверен в том, где я получаю ... Мой код страницы ASMX работает нормально & генерирует результат как заданный, но мой javascript autocomplete не вызывает страницу вообще (попробовал в отладке) и его не давая мне ошибку сообщение либо ... Помогите пожалуйста !!jQuery Autocomplete с C# и базой данных SQL Server

EDIT: У меня по-прежнему возникает ошибка «ASP.NET Ajax на стороне клиента не удалось загрузить».

<script src="/ScriptResource.axd?d=dRAn80ZulnXIbHUFZAi0thqEaFFdeMlwAh6uA_ciIINTs7jTUe13ADvaDyjOl6tPSr-1TN4Bqt6MFVjznyiXABGNxDhFk5_-02EGxOku0B-Tim4ebG59zhvC6DdsHV11uoIY024U1o0IMngrTBO45x9tPeG-PiyEUPEypUFf795T-3SY0&amp;t=ffffffffb868b5f4" type="text/javascript"></script> 
<script type="text/javascript"> 
<!-- 
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.'); 

При вводе в текстовое поле, я получаю всплывающее сообщение об ошибке:

Ajax Ошибка: researcher_list.asmx/FetchResList: ошибка: не определено: Внутренняя ошибка сервера: 500

EDITED КОД:

Aspx Код:

$(function() { 
    $('input:text').autocomplete({ 
     source: function(request, response) { 
      var pString = '{ "resName": "' + request.term + '" }'; 
      $.ajax({ 
       url: "researcher_list.asmx/FetchResList", /* same root as the page? */ 
       data: pString, 
       dataType: "jsond", 
       type: "POST", 
       contentType: "application/json", /* simplify */ 
       converters: {/* avoid the d or no d issue, works with 3.5 or prior this way */ 
        "json jsond": function(msg) { 
         return msg.hasOwnProperty('d') ? msg.d : msg; 
        } 
       }, 
       success: function(data) {/* assumes data always returned and it IS called item in the JSON */ 
        response($.map(data, function(item) { 
         return { 
          value: item.name, 
          label: item.name 
         } 
        })) 
       }, 
       error: function(xhr, textStatus, errorThrown) { 
        var errorMessage = "Ajax error: " + this.url + " : " + textStatus + " : " + errorThrown + " : " + xhr.statusText + " : " + xhr.status; 

        if (xhr.status != "0" || errorThrown != "abort") { 
         alert(errorMessage); 
        } 
       } 
      }); 
     }, 
     minLength: 2 
    }); 
}); 

ASMX Код:

[WebService(Namespace = "http://localhost/v2/pages/main.aspx")] 
[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 researcher_list : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public List<DBResearcher.Summary> FetchResList(string resName) 
    { 
     //SqlConnection connection; 
     //SqlCommand command = null; 
     //SqlDataReader myReader = null; 
     //string sql; 
     //StringBuilder sb = new StringBuilder(); 
     var tempSum = new DBResearcher(); 
     var allRes = DBResearcher.GetAllResearcher() 
         .Where(m => m.name.ToLower().Contains(resName.ToLower())); 
     return allRes.ToList(); 
    } 

    public static string[] GetCustomerNames() 
    { 
     string[] data = new string[] { "Andrew", "Ramona", "Russ", "Russell", Raymond" }; 

     return data; 

    } 
} 

файл web.config:

<httpHandlers> 
    <!-- AJAX.Net Configuration --> 
    <add verb="GET,POST" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/> 
    <remove verb="*" path="*.asmx"/> 
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
</httpHandlers> 

<!-- HTTP MODULES --> 

<httpModules> 
    <!-- doesn't work if we restrict it by <location path=...> for some reason, 
      so we have no choice but to do this at the root level. --> 
    <!--<add name="HttpUploadModule" type="AssistedSolutions.SlickUpload.HttpUploadModule, AssistedSolutions.SlickUpload" /> 
    --> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

</httpModules> 

EDIT - Ошибка при запуске ASMX страницы на своем собственном

Stack Trace: 

[HttpException (0x80004005): Failed to Execute URL.] 
    System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl(String url, String method, String childHeaders, Boolean sendHeaders, Boolean addUserIndo, IntPtr token, String name, String authType, Byte[] entity, AsyncCallback cb, Object state) +2008569 
    System.Web.HttpResponse.BeginExecuteUrlForEntireResponse(String pathOverride, NameValueCollection requestHeaders, AsyncCallback cb, Object state) +393 
    System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +220 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8699714 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
+0

попытаться изменить данные: '' {'mail': '"+ request.term +"'} ",' to: data: '{"resName": "' + request.term + '"}', ' –

+0

Без изменений .. Его все равно то же самое. Файл ASMX все еще не вызывается. –

+0

Обратите внимание на разницу между кавычками и передаваемым именем. –

ответ

1

Мой ответ построен на основе asp.net 3.5 и предположение о версии jQuery 1.7.1. Другие уже были охвачены другими плакатами. Ваш может отличаться по версии. Это просто попытка поставить комментарии в ответ с заполненными сценариями и примечаниями на стороне сервера.

Вы украшены свой класс таким образом:

[WebService(Namespace = "http://mysite.com/researcher_list/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
[ScriptService] 
public class researcher_list : WebService 
{ 

Украсьте свой метод: (используйте EnableSession ЕСЛИ вам, что ...)

[WebMethod(EnableSession = true)] 
public List<DBResearcher.Summary> FetchResList(string resName)  { 

очистку клиентского сценария:

$('input:text').autocomplete({ 
    source: function(request, response) { 
     var pString = '{ "resName": "' + request.term + '" }'; 
     $.ajax({ 
      url: "researcher_list.asmx/FetchResList", 
      /* same root as the page? */ 
      data: pString, 
      dataType: "jsond", 
      type: "POST", 
      contentType: "application/json", 
      /* simplify */ 
      converters: { /* avoid the d or no d issue, works with 3.5 or prior this way */ 
       "json jsond": function(msg) { 
        return msg.hasOwnProperty('d') ? msg.d : msg; 
       } 
      }, 
      success: function(data) { /* assumes data always returned and it IS called item in the JSON */ 
       response($.map(data, function(item) { 
        return { 
         value: item.name, 
         label: item.name 
        }; 
       })); 
      }, 
      minLength: 2, 
      error: function(xhr, textStatus, errorThrown) { 
       var errorMessage = "Ajax error: " + this.url + " : " + textStatus + " : " + errorThrown + " : " + xhr.statusText + " : " + xhr.status; 
       if (xhr.status != "0" || errorThrown != "abort") { 
        alert(errorMessage); 
       } 
      } 
     }); 
    } 
}); 

В ДОПОЛНЕНИИ к вышеизложенному, есть Интернет.config в asp.net, который необходимо настроить для работы веб-службы - предположение, что вы сделали исследование и работаете. ЕСЛИ НЕ, предложение представляет собой простой метод, который возвращает текущее время как строку с параметрами NO (данные: «{}»,) и получает это через ajax, чтобы убедиться, что он работает до того, как сложность автозаполнения накладывается.

+0

Я много раз проверял файл конфигурации .. Все, кажется, в порядке. . Сценарий выше дает мне недостающую ошибку в скобках. Я добавил недостающую скобку, но ее все еще нет. Может быть, я возился с синтаксисом? P.S. - Файл asmx уже украшен. –

+0

У меня пропала ошибка в скобках. Я закончил тем, что поставил точку с запятой, считая ее с одного уровня выше ... , но ошибка if (typeof (Sys) === 'undefined ') вывести новую ошибку («ASP.NET Ajax на стороне клиента не удалось загрузить.»); все еще существует, хотя ... что, в свою очередь, я верю, дает эту ошибку: «Ошибка Ajax: researchcher_list.asmx/FetchResList: ошибка: undefined: Внутренняя ошибка сервера: 500» –

+0

Я запустил фрагмент сценария через jslint и исправил пару незначительных проблемы с моей типизацией. –

1

Try испачкать метод с атрибутом WebMethod например:

[WebMethod] 
public static List<DBResearcher.Summary> FetchResList(string mail) 
{ 
... 
} 

Кроме того, ваши параметры должны соответствовать, поэтому измените resName на почту.

Вы также можете объединить ваши JQuery каждый в селектор автозаполнения:

$('input:text').autocomplete(...) 

Edit:

Попробуйте этот код:

$('input:text').autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: "researcher_list.asmx/FetchResList", 
      data: "{ 'resName': '" + request.term + "' }", 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      dataFilter: function (data) { return data; }, 
      success: function (data) { 
       response($.map(data.d, function (item) { 
        return { 
         value: item.name 
        } 
       })) 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert(textStatus); 
      } 
     }); 
    }, minLength: 2 
}); 
+0

это веб-метод, я просто не включил этот код ..также, если я использую статический массив javascript, он работает для каждой динамической коробки. Моя проблема заключается в том, что скрипт не вызывает asmx file –

+2

Вам нужно {до «источника». Вы заметили какие-либо синтаксические ошибки в отладчике? –

+0

Я думаю, что тот, о котором вы говорите, находится после источника: функция (запрос, ответ) –