【问题标题】:jquery validation - addMethod/remote - error message in json responsejquery 验证 - addMethod/remote - json 响应中的错误消息
【发布时间】:2012-05-22 18:35:05
【问题描述】:

我正在尝试使用远程方法,或者添加一个模仿远程方法的方法,以便能够将输入的数据发送到 Web 服务并返回带有错误状态和错误消息的 json 响应。

所以我有这个 json 响应:

{
    "isError": "true",
    "errorMessage": "The User Name you chose is already in use. Please enter another name."
}

我已经使用远程方法来获得真/假响应,但没有额外的数据。

任何帮助将不胜感激。

编辑

试过了,当然没用,因为变量不是全局变量……

$.validator.addMethod("uniqueUserName", function(value, element) {

      $.ajax({
        type: "POST",
         url: "js/username.json",
         contentType: "application/json; charset=utf-8",  
        dataType:"json",
        data: "{'" + $('#enterEmail').attr('id') + "': '" + $('#enterEmail').val() + "'}", 
        dataFilter: function(data) {
            var isError = data.isError;
            var uniqueError = data.errorMessage;
            if(isError == "true"){
                return false;
            }
        }

     })

}, uniqueError); //this last line would typically be: }, "my error message");

见小提琴: http://jsfiddle.net/jasonday/fWk5u/

【问题讨论】:

  • 您希望在 JSON 响应中返回额外数据吗?我认为这必须在服务器端/网络服务端完成,除非您想将“真/假”映射到成功/错误处理程序中的其他变量。不知道我明白你的意思。
  • @frequent - 是的,我编辑了 addMethod 函数的最后一行,以显示错误消息通常出现的位置 - 一个文本字符串。但是我想在那里传递errorMessage的json值。
  • 好的。那么您是在第一个 sn-p 中返回 JSON 响应,还是在 JSON 返回 false 时显示错误消息?另请参阅下面的编辑
  • 这是一个模型,实际的 url 将指向一个返回 json 响应的 Web 服务。我希望以相同的方式(结合)jquery validate 处理错误消息。我可以通过与插件相同的方式将其写入 DOM 来模拟它,但我宁愿集成。
  • 你能修改来自服务器的响应吗?如果你只返回一个字符串,jQuery Validate 会假定它是错误消息,所以实际上不需要返回错误消息和表示验证成功或失败的布尔值

标签: jquery json jquery-validate


【解决方案1】:

我最终弄明白了。返回成功就是我失败的地方——我一直在返回、返回 true 或返回 false——而且它们中的每一个都会“失败”验证。

remote: {
    type: "POST",
    url: "js/username.json",
    contentType: "application/json; charset=utf-8",  
    dataType:"json",
    data: "{'" + $('#enterEmail').attr('id') + "': '" + $('#enterEmail').val() + "'}",
    dataFilter: function(data) {
        var json = JSON.parse(data);
        if(json.isError == "true") {
            return "\"" + json.errorMessage + "\"";
        } else {
            return success;
        }

    }
}

【讨论】:

  • 什么是“成功”(变量或函数)?我有类似的问题,我返回真/假,验证总是说请解决这个问题。数据过滤器应该工作吗?如果是这样,您使用的是什么版本的验证插件?
  • 兄弟,我爱你!在 2019 年,问题在于我需要 WRAP 用双引号消息 '"' + 'Carl wtf' + '"'。天哪,它是如此简单,但很难找到))
【解决方案2】:

看看validval

我发现它很容易集成、调整(自定义验证、自定义警报),还可以像 here 一样将其放入 AJAX 中

编辑
那么您将数据对象发布到哪里? js/username.json 有什么作用? 如果你在那里发帖,你必须在那里做一些事情才能以你想要的格式返回对象。

因此,如果您想检查唯一的电子邮件,我将发布到服务器,在那里进行检查,构造一个对象

 object.response.success = true/false
 object.response.data = "some text to display"

然后通过AJAX返回object.response。

像这样:

 $.ajax({
      async: false,
      type: "post",
      url: "somewhere_to_handle_username_check",    
      data: data: "{'" + $('#enterEmail').attr('id') + "': '" + $('#enterEmail').val() + "'}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      // AJAX OK, return true/false
      success: function(objResponse){
           if (objResponse = "true"){
                alert("success");
            } else {
                alert("failed, username already taken");
            }
      // AJAX Failed
      error: function () { 
        alert("failed - AJAX failed");
        }
    });

我通常验证客户端,输入电子邮件地址(使用上面的验证),然后将电子邮件地址发送到服务器以检查值并构造响应对象。

希望这会有所帮助。如果没有,请告诉我您的 AJAX 请求应该做什么以及 js/username.json 做什么。

【讨论】:

  • 这并没有真正回答我的问题。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2011-03-31
  • 2022-01-09
相关资源
最近更新 更多