我可以在jQueryValidate远程方法中格式化URL吗?

rryofs0p  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(105)

好的,这很好:

$( "#myform" ).validate({
  rules: {
    email: {
      remote: {
        url: "/ajax/check-email.php",
        mothod: "get",
        dataFilter: function( response ) {
          return response;
        }
      }
    }
  }
});

字符串
此配置自动生成GET到url:

/ajax/check-email.php?email=EMAIL-TO-CHECK


问题是我有这个API要查询:

/ajax/email/EMAIL-TO-CHECK/exists


所以我必须在运行时创建要查询的url,但我不能以任何方式这样做。
我尝试直接使用$. AJAX ()来实现:

remote: function( ele ) {

  var email = $(ele).val()

  $.ajax({
    url: "/ajax/email/"+ email + "/exists",
  }).done(function( xhr ) {
    return xhr
  });
}


但验证不会触发。
我还尝试使用一个函数来获取“url”,但“email”是空的。就像这样:

var createUrl = function() {
  var id = $("#myform input[name=email]").val(); //this is empty
  return "/manager/ajax/pricelist/" + id + "/exists"
}

$( "#myform" ).validate({
  rules: {
    email: {
      remote: {
        url: createUrl(),
      }
    }
  }
});


有什么想法吗?非常非常感谢。

qlvxas9a

qlvxas9a1#

不,这在现有的remote:方法中是不可能的。关于documentation
服务器端资源通过jQuery.ajaxXMLHttpRequest)调用,并获取与已验证元素的名称对应的键/值对及其值作为GET参数。
所以?email=EMAIL-TO-CHECK的使用是内置在方法中的,没有机会定制。
对您来说,最简单的解决方案可能是在服务器上创建一个重写规则,重写如下内容

/ajax/check?NAME=VALUE

字符串

/ajax/NAME/VALUE/exists


更复杂的解决方案是编写自己的验证方法,类似于remote:,但允许您提供一个回调函数来生成URL。

相关问题