2016-01-11 3 views
1

У меня есть специальный валидатор, чтобы проверить, является ли введенный номер уникальным или нет. Если номер не является уникальным, он должен возвращать значение false.Оператор возврата вызывается перед вызовом ajax

Javascript код выглядит так:

function ValidatePAuthNo(sender, args) { 

     //args.IsValid = true; 

     var PAuthNo = $('[id$=tbPriorAuthNumber]').val(); 

     $.ajax({ 
      type: "POST", 
      url: "MedicaidPriorAuth.aspx/IsPAuthUnique", 
      data: JSON.stringify({ pAuthNo: PAuthNo }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: true, 
      error: function (response) { 
       alert(" An error occurred." + response.error); 
      }, 
      success: function (data) { 
       if (data.d == false) { 
        //alert("P. Auth# already exists! Please enter new P. Auth #."); 
        $("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #."); 
        args.isValid = false; 
       } else { 
        $("[id$=lblError]").val(""); 
        args.isValid = true; 
       } 

      } 
     }); 


     return args.IsValid; 
    } 

Мой веб-метод возвращает правильное значение, однако, проблема заключается в том, что возвращение args.IsValid вызывается перед методом AJAX. Я здесь что-то не так? Если мой подход ошибочен, какой может быть правильный подход для этого с клиентской стороны?

+1

Рекомендуемая литература - [? Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) – neilsimp1

+1

Это не имеет никакого отношения к asp.net, это ajax, а ajax означает асинхронный JavaScript и XML, поэтому ajax-вызовы по умолчанию (если вы не задаете параметр async: false) являются несинхронными, ваша функция вернется, прежде чем вы получите ответ от сервера. передать функцию обратного вызова для выполнения после ответа сервера. просмотрите свой код – lyz

ответ

-1

Метод ajax - это асинхронный вызов, это означает, что он отправляет запрос серверу, и сервер возвращает его в свое время. В то же время выполнение потока (javascript) продолжается. Это означает, что вы не можете вернуть ответ из вызова ajax, потому что возврат будет происходить до получения ответа от сервера.

Решение является методом обратного вызова. Вы можете сделать это с помощью jquery-обещаний, но для простоты приведенный ниже пример просто использует javascrpt. https://api.jquery.com/promise/

Кроме того, это очень легко найти вопрос, вы должны попытаться найти ответы, прежде чем отправлять новый вопрос

function ValidatePAuthNo(sender, args, callback) { // call back is a function you pass as an argument 

    //args.IsValid = true; 

    var PAuthNo = $('[id$=tbPriorAuthNumber]').val(); 

    $.ajax({ 
     type: "POST", 
     url: "MedicaidPriorAuth.aspx/IsPAuthUnique", 
     data: JSON.stringify({ pAuthNo: PAuthNo }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: true, 
     error: function (response) { 
      alert(" An error occurred." + response.error); 
     }, 
     success: function (data) { 
      if (data.d == false) { 
       //alert("P. Auth# already exists! Please enter new P. Auth #."); 
       $("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #."); 
       args.isValid = false; 
      } else { 
       $("[id$=lblError]").val(""); 
       args.isValid = true; 
      } 
      callback(args.isValid); 
     } 
    }); 
} 
+0

Я получаю сообщение об ошибке «Объект, ожидаемый» при обратном вызове. – user1181942

+0

Я также сделал некоторые исследования, но, возможно, я использовал неправильные ключевые слова .. – user1181942

Смежные вопросы