jessrubio Ответов: 1

При вызове веб-службы через jquery я получаю эту ошибку . Любая идея


вот ошибка, которую я получаю

System.InvalidOperationException: Missing parameter: MyParameterName.
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.UrlParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()



<pre>     
[WebService(Namespace="http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        [WebMethod]
        [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]

         public List<string> MethodName(string parameterName)
            {
               
                List<string> result = new List<string>();          
               

                    using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("connectionstring"))
                    {
                        using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("mydbasequery, con))

                        {
                            con.Open();
                            cmd.Parameters.AddWithValue("@xxx", parameterName);

                            System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();
                            while (dr.Read())
                            {
                                result.Add(dr["column_name"].ToString());
                            }
                            return result.ToList();
                        }                      
                    }
                }
                else
                {
                    result.Add("sample");
                    return result.ToList();
                }
            }




<pre lang="Javascript">
<pre>  <script type="text/javascript">
      $(document).ready(function () {
          functionName();
      });
      function functionName() {

          $('.classname').autocomplete({
              source: function (request, response) {
                  $.ajax({
                      async: true,
                      type: "POST",
                      contentType: "application/json; charset=utf-8",
                      data: "{'service_parameter' :'" + $('.classname').val() + "'}",
                      url: 'WebService1.asmx/MethodName',
                      dataType: "json",
                      crossDomain: true,
                      success: function (data) {
                          if (data != null) {                            
                              response(data.d);
                          }
                          else {
                              response("rule");
                          }
                       },
                      
                      error: function (error) {
                          response("rule");
                      }
                  });
              },
              minLength: 10,            
          });
      }
</script>


Что я уже пробовал:

Я попробовал этот код и все еще получаю эту ошибку снова и снова..

Richard Deeming

Вызывается параметр вашего метода parameterName, но имя, которое вы передаете из Javascript, - это service_parameter.

Является ли это просто несоответствием, введенным при анонимизации вашего кода, или имена не совпадают в вашем реальном коде?

Richard Deeming

Кроме того, вы создаете строку JSON вручную, которая не будет работать, если пользователь введет одну кавычку в текстовое поле. Вам лучше использовать встроенный объект JSON:

data: JSON.stringify({ 'parameterName': $('.classname').val() })
В формате JSON.преобразовать в строки() - JavaScript-кода | МДН[^]

jessrubio

спасибо за ваш комментарий, Я пытаюсь изменить свое решение, но ошибка все та же.

ZurdoDev

А потом ты сделал что-то не так. Вам нужно его отладить. Мы не можем управлять им для вас. Ричард прав, вам нужно соответствовать имени параметра.

jessrubio

Я уже исправил parameterName и service_parameter. они оба такие же, как parameterName, я запускаю свой код, и он работает именно так, как я хочу, текст теперь автозаполняется на основе моего ввода символов, но как только он проверит его с помощью google chrome Iand на моей вкладке newtwork, у меня есть эта ошибка.. "Система.InvalidOperationException: отсутствует параметр: parameterName", есть ли что-то с моей сетью. или это мое имя параметра?

1 Ответов

Рейтинг:
1

Sarita Mall

Привет,ниже приведено решение :

var serpar_val = $('.classname').val() ;

assign like below:

data: JSON.stringify({ service_parameter: serpar_val }),