通过JSON answere验证简单的HTML表单

时间:2016-08-25 07:36:47

标签: javascript php jquery html json

我是一名用户体验设计师,也是这些JS dummie /“HTML编码人员”之一。

在发送表单之前,我需要帮助或提示通过第二个请求验证简单的HTML表单,该请求返回JSON应答。

我在目标网页上有一个非常简单的HTML表单,用户可以输入优惠券代码:

  <form id="tokensubmit" method="GET" action="https://www.xyz/cart.html">
        <div class="form-group">
            <input type="text" name="tokenCodeAdd" id="tokenCodeAdd" size="25" value="" class="form-control input-lg" placeholder="Please enter Coupon Code">
        </div>
        <input id="input_id" type="submit" class="btn btn-lg btn-warning btn-block" value="Submit">
    </form>

如果用户输入优惠券代码并点击提交按钮,代码将添加到操作网址(https://www.xyz/cart.html),用户将被重定向到此cart.html页面。如果优惠券代码是正确的,一切都很好。如果没有,他会在cart.html页面上收到错误消息。

到目前为止一切顺利。

但是:我想验证优惠券代码,而无需将用户重定向到新网站(cart.html)。 系统已经为此提供了第二个URL。一个网址:

/checkout/validate.html?tokenCode=12345678

这将返回一个状态为:

的JSON回复
{"error":"Wrong Coupon Code."}

如果优惠券代码不正确。 如果它是有效的,例如:

{"error":"null"}

回报。

我正在搜索的是一个简单的解决方案,首先单击“提交”按钮调用验证URL(validation.html),解析返回的JSON,如果“错误”不是别的,则阻止表单发送“null”并在表单输入正上方打印JSON消息(“Wrong Coupon Code。”)。

如果“error”=“null”,则表单行为不应更改。它只需打开https://www.xyz/cart.html URL并附加tokenCode作为参数。

我尝试/开始的内容如下:

$('#tokensubmit').submit(function(event){
  event.preventDefault(); 
  var tokenCheck = $(this).find('input[id="tokenCodeAdd"]').val(); 
  $.ajax({
    url: '/checkout/validate.html'+tokenCheck,
    type: 'GET', 
    success: function(data){
      var jsonData = $.parseJSON(data);
    }
  });
});

我知道,这只是一个开始。缺少真正的解析部分,如果验证失败则输出错误消息,如果没有则重定向。

任何可以提供帮助的人? 而且先进了!

小提示:表单放在WordPress驱动的登陆页面上,因此PHP和JQuery是一个选项。

3 个答案:

答案 0 :(得分:1)

您获得验证的代码几乎正确:

$('#tokensubmit').submit(function(event){
  event.preventDefault(); 
  var tokenCheck = $(this).find('input[id="tokenCodeAdd"]').val(); 
  $.ajax({
    // either attach the parameter like you are trying to do directly to the url,
    // but in this way:
    url: '/checkout/validate.html?tokenCode='+tokenCheck,
    // or give the URL parameter(s) as data object to jQuery:
    data: {
        tokenCode: tokenCheck
    }
    type: 'GET',
    // if you specify the dataType you want to receive as json,
    // jQuery will parse it for you already
    dataType: 'json',
    success: function(data){
        // now you can check the data for error or not, for example like:
        if(data.error == null){
            // do something (most likely REALLY submit the form now?)               
        }else{
            alert('tokenCode invalid');
        }
    }
  });
});

答案 1 :(得分:0)

使用jquery,您可以通过数据参数发送,它将解决如何将其放入URL:

$.ajax({
    url: '/checkout/validate.html',
    type: 'GET', 
    data: {"tokenCode": tokenCheck}
    success: function(data){
      var jsonData = $.parseJSON(data);
    }
});

如果tokenCheck为空,我还建议不要执行Ajax请求。

答案 2 :(得分:0)

当用户离开输入字段时,检查优惠券代码会不会更容易?首先是提交整个表单的例子。

$('#tokensubmit').on('submit', function(event) {
    event.preventDefault();

    var validationSuccess = false;

    $.ajax({
        url : '/checkout/validate.html',
        type : 'GET',
        data : { tokenCode : $('#tokeninput').val() }
        success : function(response) {
            var data = $.parseJSON(response);
            if (data.error === null) {
                validationSuccess = true;
            }
        }

        if (validationSuccess === true) {
            $('#tokensubmit').off('submit').submit();
        }
    });

那么我们在这里做了什么?提交事件监听器几乎与您完成的一样。我们阻止默认提交表单并执行ajax请求以验证输入值。如果请求没有返回错误作为响应,我们只需从表单解除绑定提交事件监听器并再次提交表单。

在我看来,最好在输入字段上使用模糊事件监听器。结合使用,您可以使用HTML5约束验证API。因此,您不必提交表单,并且将在模糊输入字段时执行ajax请求。我认为这将是更好的用户体验。

所以这里是模糊事件监听器:

<input type="text" name="the-input-field" id="the-input-field" value="" required>

$('#the-input-field').on('blur', function(event) {
    var element = this;
    $.ajax({
        url : '/checkout/validate.html',
        type : 'GET',
        data : { tokenCode : element.val() }
        success : function(response) {
            var data = $.parseJSON(response);
            if (data.error !== null) {
                element.setCustomValidity('Your input is invalid!');
                // place some error message elsewhere in the markup
            } else {
                element.setCustomValidity('');
            }
        }
    });
});

首先,我们将所需的Attribute放在input元素中。它根据需要标记输入元素。所以,如果它是空的,你就无法提交表格。然后我们放置了模糊事件监听器,它正在执行ajax请求。如果响应为false,我们会通过setCustomValidity发出自定义错误。它是本机HTML5约束验证API函数。如果设置了input元素的自定义错误,则无法提交表单。如果用户输入另一个令牌,则在离开输入元素时再次完成请求。如果令牌有效,则将删除自定义错误消息并提交表单。