Проблема с результатом AJAX в правиле required jQuery Санкционируй тебя

У меня есть инцидент с ответом, который у меня есть в AJAX, всем этом внутри одного depends правила required в JS с jQuery Санкционируй тебя для утверждения формуляра.

Я оставляю им код, который я выполняю:

$('#form').validate({
  ignore: '[readonly=readonly]',
  errorPlacement: function (error, element) {
    var lastError = $(element).data('lastError'), newError = $(error).text();
    $(element).data('lastError', newError);
    if (newError !== '' && newError !== lastError) {
      $(element).popover({
        trigger: "manual",
        placement: "auto top",
        content: newError,
        container: "body",
        template: "

" }); if (element.is(':hidden')) { $(element).next('span').popover('show').addClass('has-error').removeClass('has-success'); console.log('hidden element'); }else { $(element).popover("show").parents(".form-group").addClass('has-error').removeClass('has-success'); console.log('normal element'); } } }, success: function (label, element) { $(element).popover("hide").parents(".form-group").removeClass('has-error').addClass('has-success'); }, rules: { "3_nombre[]": { maxlength: 500, required: { depends: function(element){ var id=$(this).parents('table').attr('id'); var rut_p=$('#'+id+' #3_rut').val(); var xurl="vws/ajax_validar_rut.php?rut="+rut_p; $.ajax({ url: xurl, type: "GET", success: function(data){ // alert(1); if( data==0 ){ // alert(2); if($('.3_rut').val() !='' || $('.3_ape_p').val() !='' || $('.3_ape_m').val() !='' ){ // alert(3); return true; }else { // alert(4); return false; } // return true; }else { // alert(5); return false; } } }); } } }, } });

Тогда понятно, что он был required, будь должен получать 'TRUE' или 'FALSE'. Но он это не получает. Мне не хватает чего-то: существует какая-то ошибка, которую отладчик не видит?

Мне оставалось описывать что 'xurl'-> 'ajax_vallidar_rut.php' санкционирует rut в себе (который законный) и который или нет превосходящим ранг, чтобы идентифицировать, если он предприятия или натурального человека. Это возвращает '0' или '1', который является тем, что я санкционирую потом в success AJAX.

UPDATE

Он нашел решение, но будь устаревшей. Именно это была тема async=false в AJAX, оставаясь таким;

"3_ape_p[]": {
maxlength: 500,
required: {
    depends: function(element){
        var id=$(this).parents('table').attr('id');
        var rut_p=$('#'+id+' #3_rut').val();
        var xurl="vws/ajax_validar_rut.php?rut="+rut_p;
        var bRequired=false;
        $.ajax({
            async: false,
            url: xurl,
            type: "GET",
            success: function(data){
                if( data==1 || data==0 ){
                    if($('.3_rut').val() !='' || $('.3_ape_m').val() !='' || $('.3_direccion').val() !='' || $('.3_num').val() !='' || $('.3_comuna').val() !='' || $('.3_email').val() !='' || $('.3_tel').val() !='' || $('.3_fax').val() !=''){
                        // return true;
                        bRequired=true;
                    }else {
                        // return false;
                        bRequired=false;
                    }
                    // return true;
                }else {
                    // return false;
                    bRequired=false;
                }
            }
        });
        return bRequired;
      }
    }
},

Извлекая идею, которую ты дал мне, у меня остается это:

"3_nombre_prop[]": {
   maxlength: 500,
   required: true,
   remote: {
       xurl: "vws/ajax_validar_rut.php?rut="+$('#'+$(this).parents('table').attr('id')+' #3_rut_prop').val();
       type: "GET",
       data: {
          ape_p: $('.3_ape_p').val(),
          ape_m: $('.3_ape_m').val()
       }
   }
},

Но он говорит мне, что у меня есть ошибка синтаксиса в унифицированном указателе ресурса.

Он был бы должен меняться type и оставлять это как POST чтобы посылать rut из-за data?

Благодарный, как всегда. Большое спасибо!

UPDATE

Я не могу думать, что это мне было так просто, СПАСИБО @Alvaro из-за путеводителя. В конце концов я оставил это таким;

"3_nombre_prop[]": {
    maxlength: 500,
    required: true,
    remote: {
        url: "vws/ajax_valida_campos.php",
        type: "POST",
        data: {

        }
    }
},

И в ajax_valida_campos.php, я остаюсь таким;

0)
      $bValida=false;
  else 
      $bValida=true;

  echo $bValida;
?>

Таким образом, я санкционирую, когда существуют данные, и когда нет. Он был бы правильным?

БЛАГОДАРНЫЙ!

1
задан 17.03.2016, 17:40
1 ответ

Есть две проблемы с кодом наверху:

  1. AJAX - асинхронный вызов, но ты пробуешь использовать ее синхронным способом.
  2. Область return true или return false это не подходящий.

Что это значит? В depends ты реализуешь вызов AJAX, который работает asíncronamente пока код depends продолжи и закончись, не получив раньше ответа (проблема 1). Даже, если бы AJAX был синхронным (не рекомендуемый) и ты прибываешь в часть, которую он возвращает true или false, стоимость, которая возвращается, - внутри функции success и не внутри depends что остался бы, не возвращая ничего (проблема 2).

Было бы возможно решать это делая синхронный AJAX и сохраняя стоимость в переменной, которая возвратилась бы в depends, но это не лучший выбор. Вместо этого, ты был бы должен использовать внутренний метод jQuery Санкционируй тебя: remote.

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

Поскольку ты можешь видеть в ссылке наверху, синтаксис remote она очень простая и сходная с той AJAX в jQuery, которым почти ты имеешь уже все. В твоем особенном случае оно было бы чем-то как это:

Заметь: Следующий код не был протестирован и может содержать неудачи, идея состоит в том, чтобы он стоил ссылкой для того, чтобы поддержать тебя и завершать это

rules: {
    "3_nombre[]": {
        maxlength: 500,
        required: true,
        remote: {
            url: "vws/ajax_validar_rut.php",
            type: "get",
            data: {
                rut: $('#' + $(this).parents('table').attr('id') + ' #3_rut_prop').val(),
                rut3: $('.3_rut').val(),
                ape_p: $('.3_ape_p').val(),
                ape_m: $('.3_ape_m').val()
            }
        }
    }
}

Идея состоит в том, чтобы ты переместил все необходимые параметры в услугу, которая подтверждает, если rut правилен, и все операции осуществятся там, возвращая true если он действительный или false если он недействительный.

0
ответ дан 24.11.2019, 14:43
  • 1
    Я думаю, что это у меня есть, не могу думать, что он так f и # 225; cil. Измените type в Я думаю, что это у меня есть, не могу думать, что он так f и # 225; cil. Измените [110] в [111]. на дату не envi и # 233; ничто и в файле, который находится в унифицированном указателе ресурса, только не санкционировало, что; в Я думаю, что это у меня есть, не могу думать, что он так f и # 225; cil. Измените [110] в [111]. на дату не envi и # 233; ничто и в файле, который находится в унифицированном указателе ресурса, только не санкционировало, что; в [112] были данные а, env и # 237; в один false. Понимают? Так или иначе, @Alvaro much и # 237; пропасти спасибо!POST были данные а, env и # 237; в один false. Понимают? Так или иначе, @Alvaro much и # 237; пропасти спасибо!POST. на дату не envi и # 233; ничто и в файле, который находится в унифицированном указателе ресурса, только не санкционировало, что; в Я думаю, что это у меня есть, не могу думать, что он так f и # 225; cil. Измените [110] в [111]. на дату не envi и # 233; ничто и в файле, который находится в унифицированном указателе ресурса, только не санкционировало, что; в [112] были данные а, env и # 237; в один false. Понимают? Так или иначе, @Alvaro much и # 237; пропасти спасибо!POST были данные а, env и # 237; в один false. Понимают? Так или иначе, @Alvaro much и # 237; пропасти спасибо! – x_Mario 17.03.2016, 17:33
  • 2
    Оценен, каков правильный синтаксис, чтобы посылать данные из-за POST в remote? Так как env и # 237; или данные и эти не прибывают в файл в унифицированном указателе ресурса. – x_Mario 17.03.2016, 20:34
  • 3
    @x_Mario, чтобы посылать данные из-за post, измени ее l и # 237; nea type: "get" из-за type: "post" – Alvaro Montoro♦ 18.03.2016, 02:22
  • 4
    Если я это изменил, но мою консультацию направили в, как я устанавливаю стоимость в data. Но уже resolv и # 237;. БЛАГОДАРНЫЙ!! – x_Mario 18.03.2016, 17:49