Как обработать результаты из поста jQuery ajax - PullRequest
0 голосов
/ 14 января 2010

Я делаю пост jQuery ajax в функции JavaScript, используемой элементом управления asp:CustomValidator Веб-метод возвращает логическое значение. Как мне преобразовать результат, чтобы скрипт валидации работал правильно.

Клиентский код

<script language="javascript" type="text/javascript">
function ValidateInput(source, args) {
    if($('#MyTxtBox').val().length > 0) {
        var result;
        var webMethod = 'http://domain/webservice.asmx/ValidateInput';
        var parameters = "{'input':'" + $('#MyTxtBox').val() + "'}";

        $.ajax({
            type: "POST",
            url: webMethod,
            data: parameters,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {            
                args.IsValid = msg.d;
            }
         });
    }
    else {
        args.IsValid = false;
    }
}
</script>
<asp:TextBox ID="MyTxtBox" runat="server" />
<asp:CustomValidator ID="cvCreditCardNumber" runat="server" ClientValidationFunction="ValidateCCNumber" Display="Dynamic" 
ErrorMessage="&nbsp;Please enter valid input." />

Код веб-службы

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public bool ValidateInput(string input)
{
    if(input.Equal("jQuery is awesome!"))
        return true;
    else
        return false;
}

1 Ответ

1 голос
/ 14 января 2010

Ну, я не думаю, что это будет работать в обычном режиме. Запрос AJAX является асинхронным, и, поскольку существует только один поток пользовательского интерфейса, вы не можете заблокировать его для ожидания. Функция проверки, предоставляемая ASP.NET, должна быть синхронной.

Вы можете взломать его, чтобы работать, может быть, если вы можете отложить, когда происходит проверка, и запустить запрос AJAX раньше. Но в этом случае, я бы сказал, просто используйте проверку на стороне сервера, поскольку то, что вы имеете в качестве проверки на стороне клиента, все равно попадает на сервер.

...