возвращение строки с удалённым использованием плагина jquery validate - PullRequest
3 голосов
/ 03 июня 2010

Из документации jquery, описывающей удаленную функцию плагина jquery validate:

Ответ оценивается как JSON и должен быть истинным для допустимых элементов, и может быть любым ложным, неопределенным или нулевым для недопустимых элементов, используя сообщение по умолчанию; или строка, например. «Это имя уже занято, вместо этого попробуйте peter123», чтобы отобразилось сообщение об ошибке.

У меня есть php-страница, которая отображает эхо-ответ и работает, как описано, если я использую echo («true») или echo («false») Однако всякий раз, когда я отображаю строку, сообщение об ошибке не отображается, даже сообщение по умолчанию. Что я должен сделать, чтобы отобразить сообщение об ошибке и отобразить его в ярлыке ошибки рядом с проверяемым полем ввода?

вот моя функция jquery:

$(document).ready(function(){
    $("#masq").validate({ 
        rules: { 
             user: {
                required:true,
                minlength:1,
                remote:"<?=$_SERVER['PHP_SELF']?>?action=remoteCheck"
             }
        }, 
        messages: { 
            user: "id must have at least 1 character."
        } 
    });         
 });

и моя функция php:

//sql validation here
    if(!$user) {
        $return = "id " . $user . " does not exist."; 
        //echo("false"); works correctly
            echo($return); //does  
    }
    else {
        echo("true");
    }

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Я тоже боролся с этим (мне нужно передать ему более одного значения, и в зависимости от того, какие условия возвращают false, показывать составные сообщения об ошибках, но это для другой публикации SO), но, как я и делал изначально, вы неправильно понимаете то, что говорится в документации - он может ТОЛЬКО возвращать true или false (потому что он передается в формате JSON) - «строка», на которую он ссылается, это если вы используете message: code, а затем указываете сообщение, относящееся к вашей ошибке: 1001 *

Вот пример (с комментариями):

$("#MemberInfo").validate({
    errorPlacement: function(error, element) {
           error.insertAfter(element);
       },
    rules: {    
        Memberemail: {
            required: true,
            email: true,
            remote: "checkReg.cfm"
        },

    },
    messages: {
        Memberemail: {
            required: "Please enter a valid email address",
            remote: jQuery.validator.format("{0} is already registered")    
        }
    }
});

Код на стороне сервера возвращает «true» или «false», а {0} в сообщении помещает значение, переданное серверному сценарию из формы, и распечатывает это плюс оставшуюся часть пользовательского сообщения об ошибке. в ошибке, которая появляется рядом с полем.

Я все еще изучаю JQuery, поэтому я надеюсь, что это поможет вам или кому-то еще, если это все еще проблема для вас!

2 голосов
/ 30 сентября 2011

Я могу подтвердить, что если ваш сервер возвращает действительный JSON (не только действительный JS), возможен возврат строки.В Ruby on Rails я смог сделать это через "my string".to_json, который позаботится о любом побеге, необходимом.Не уверен, что будет подход PHP.Строка JSON должна быть заключена в двойные кавычки, например: 'My name is "Liam"'.to_json => ""My name is \\"Liam\\""".Какой бы ни была ваша серверная платформа, вам нужно будет предоставить строки, которые выглядят так, как на правой стороне этого =>.

1 голос
/ 03 июня 2010

Как указано в документации, вам нужно вывести действительный JavaScript, поэтому заключите в кавычки вашу строку (и не забудьте экранировать, если в вашем идентификаторе могут быть кавычки или еще много чего):

$return = "\" id" . $user . " does not exist.\"";

Вы не наберете

var foo = id 2 does not exist.;

в JS тоже, не так ли?

0 голосов
/ 20 апреля 2012

Я ввел ошибку в github, но это должно ответить на ваш вопрос.
Это не идеально, но оно заставит ваши вещи работать

Scenerio
Сравнение даты в форме с датой в базе данных.
Используется удаленно для вызова метода в PHP Lithium Framework.
Ответ представляет собой объект json {"data": "true"} или {"data": "введите дату, превышающую xx / xx / xxxx"}

Это с треском проваливается.
Прослеживание этого показывает, что это делает короткие замыкания, делая почту (я думаю).

Если я передаю только строку "true" или "false", она работает нормально.
Если я передаю «какое-то сообщение» вместо false, оно также прерывается.

Документация гласит, что я должен быть в состоянии передать обратно сообщение, ну, если я передам что-то, кроме логического, оно сломается.
Я не уверен, что мне также нужно добавить заголовок или что-то?

Работа вокруг
Я скачал исходный файл (вместо использования cdn) Я изменил строки 976 и 985 из ответа на response.data и использовал свой оригинальный объект json.

...