1

我完全是 jQuery 和 Javascript 的菜鸟。

需要一些帮助。我有一个 AJAX 请求命中 php 脚本。如果数据经过验证,php 将返回一些 JSON。如果出现错误,它会返回一个带有错误文本的 html 字符串(如果需要,我可以将其更改为 json 响应,但我现在对它作为 html 感到满意......)

我遇到的问题是如何识别 json 响应并对 JS 中的后续 if else 语句进行编码以确定下一步该做什么。

submitHandler: function(form) {
    $.post( window.location, $("#checkoutCustomer").serialize(), function(data) {
        // TODO: get this to respond to json response or html...
        // need something here to detect presence of JSON in the post response  
        $('#checkoutCustomerResults').html(data); // the html response case
        $(".continue_checkout_link").show(); // the json repsonse case
    });
}

理想情况下,在成功场景 (JSON) 中,响应应该触发页面在浏览器中加载新 URL,我该怎么做呢?

4

3 回答 3

2
submitHandler: function(form) {
$.post( window.location, $("#checkoutCustomer").serialize(), function(data) {
    if(typeof data === 'string')
        $('#checkoutCustomerResults').html(data);
    else if(typeof data === 'object')
       $(".continue_checkout_link").show();
    else
        alert('Something else');
});
}
于 2012-05-28T06:31:01.443 回答
1

我最近遇到了类似的要求。我的最终解决方案是将所有响应都设为 JSON。所有答案都有一个status共同的参数。status可以取success, error, 或的值,redirect其余属性根据 的值设置status。例如 if status == 'redirect',那么我可以期望有另一个名为的参数redirect,该参数将包含要重定向到的 URL。如果status == 'error'那时我可以期待一个名为的参数errors(在我的情况下,它包含更多带有所有错误字段的 JSON,但在您的情况下,您可以将 HTML 放在那里)

编辑这里是一些代码来澄清:

submitHandler: function(form) {
  $.post(window.location, $('#checkoutCustomer').serialize(), function(data) {
    if (data.status == 'redirect') {
      window.location = data.redirect;
      return;
    }
    else if (data.status == 'error') {
      // data.errors will contain some HTML you set on the server side
      // display it however you like
    }
    else if (data.status == 'success') {
      // do whatever you want on success
    }
    else {
      // handle unknown status, should never happen
    }
  }, 'json');
}

注意'json'最后的:它是 的第 4 个参数$.post,并告诉 jQuery 期望 JSON 作为响应。这样data,回调中的参数将包含已解析的 JSON 响应作为简单对象。

于 2012-05-28T06:03:48.950 回答
1

我个人会使用 jQuery 的功能来为特定的状态代码调用特定的处理程序。这当然需要服务器表现良好并正确使用状态 http 状态代码,即。200 OK失败不返回

然后你会做这样的事情

$.ajax({
   url:"enpoint of service",
   dataType: "json",
   statusCode: {
   200: function(data) {
      //handle success
    },
    500: funciton(){
        //handle internal server error
    }
  }
});

或者您可以使用完成的jqXHR对象并失败

$.ajax({
       url:"enpoint of service",
       dataType: "json"
    }).done(function(data){
       //handle success here
    }).fail(function(){
       //handle error here
    }).always(function(){
       //ecuted regardless of success or failure
    });
于 2012-05-28T06:20:37.223 回答