使用 JQuery AJAX 预过滤器检查响应数据并有条件转发到“错误”事件处理程序

发布于 2024-10-27 19:10:46 字数 1234 浏览 0 评论 0原文

我可能偏离了路线,但我想知道是否可以使用 JQuery prefilter 功能分析 Ajax Success 中的响应数据,并根据返回的 JSON(错误消息)中是否存在某些元素,有条件地转发到我的 ajax 调用中的 error 事件处理程序。

如果这是为页面中的任何 ajax 函数全局设置的,那就太好了。

也许这不是解决这个问题的最佳方法;如果有人有其他想法,请告诉我!

前置过滤器:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter( "json", function( options, originalOptions, jqXHR ) {
    jqXHR.success(function(data, textStatus, jXHR) {
        if( hasErrors(data) ) {
           //forward to error event handler?
        }
    });
});

Ajax 调用:

$.ajax({
      type:     "POST",
      data:     {  
                    theData: "someData"                    
                },
      url:      theUrl,
      dataType: 'json',
      cache:    false,          
      success:  function (data, textStatus, jqXHR) {
                    //do stuff on success
                }
      error:    function ( jqXHR, textStatus, errorThrown ) {
                    //I want to do this stuff if data contains errors from server
                } 
 });

非常感谢!

I may be way off course, but I was wondering if it's possible to use the JQuery prefilter functionality and analyze the response data in an Ajax Success and conditionally forward to the error event handler in my ajax calls based on the existence of certain elements in my returned JSON (error messages).

It would be nice if this was globally set for any ajax function in the page.

Maybe this isn't the best way to go about this; if anyone has an alternative idea, please let me know!

The prefilter:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter( "json", function( options, originalOptions, jqXHR ) {
    jqXHR.success(function(data, textStatus, jXHR) {
        if( hasErrors(data) ) {
           //forward to error event handler?
        }
    });
});

Ajax call:

$.ajax({
      type:     "POST",
      data:     {  
                    theData: "someData"                    
                },
      url:      theUrl,
      dataType: 'json',
      cache:    false,          
      success:  function (data, textStatus, jqXHR) {
                    //do stuff on success
                }
      error:    function ( jqXHR, textStatus, errorThrown ) {
                    //I want to do this stuff if data contains errors from server
                } 
 });

Thank you so much!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

行雁书 2024-11-03 19:10:46

我是这样做的:我存储原始的成功函数(特定于每个请求),然后附加另一个回调。如果没有错误,我将调用原始回调:

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    var originalSuccess = options.success;

    options.success = function (data) {
        if(hasErrors(data)) {
           //forward to error event handler or redirect to login page for example
        }
        else {
            if (originalSuccess != null) {
                originalSuccess(data);
            }
        }   
    };
});

Here's how I do it: I store the original success function (specific for each request), and then attach another callback. If it didn't have errors, I call the original callback:

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    var originalSuccess = options.success;

    options.success = function (data) {
        if(hasErrors(data)) {
           //forward to error event handler or redirect to login page for example
        }
        else {
            if (originalSuccess != null) {
                originalSuccess(data);
            }
        }   
    };
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文