繁体   English   中英

jQuery AJAX Web服务调用处理HTTP错误的问题

[英]Issues with handling http errors with jQuery AJAX webservice calls

我正在开发一个jQuery应用程序,在该应用程序中,我需要在HTTP错误发生时捕获它。 以下是我的摘录。

// Function to validate URL

function validateURL(url) 
{
    var pattern = new RegExp();
    pattern.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
    if (!pattern.test(url)) 
    {
        return false;
    }
    return true;
}

// Generic error handler for handling the webservice requests.
function initWebService(wstype, wsurl,jsonData)
{
    // If the method parameter is not either "GET" or "POST" display an error message to the developer.

    var msgValidateArgument;
    var wsCallStatus;
    var callbackData;

    if ((arguments[0] != 'GET') && (arguments[0] != 'POST'))
    {
        //alert("Invalid");
        //alert("You must provide a valid http method in your webservice call.");
        msgValidateArgument = "You must provide a valid http method in your webservice call.";
        return msgValidateArgument;
    }

    // Making sure whether the developer is passing the required number of parameters.
    if(arguments.length < 3)
    {
        //alert("Some required arguments seems to be missing. Please check your webservice invocation.");
        msgValidateArgument = "Some required arguments seems to be missing. Please check your webservice invocation.";
        return msgValidateArgument;
    }

    if (!validateURL(arguments[1]))
    {
        msgValidateArgument = "You must provide a valid URL in your webservice call.";
        return msgValidateArgument;
    }

    if(arguments[2] != ''){
        var response=jQuery.parseJSON(arguments[2]);
            if(typeof response =='object'){
                //It is JSON
                alert(response.toSource());
            }
            else{
            msgValidateArgument = "The JSON data being passed is not in valid JSON format.";
            return msgValidateArgument;
        }
    }

    // Making the AJAX call with the parameters being passed. The error handler handles some of the possble http error codes as of now. 

    $.ajax({
        type: arguments[0],
        url: arguments[1],
        data: arguments[2],
        dataType: 'json',
        async:false,
        statusCode:{
            404: function(){
                alert('Page not found');
            },
            500: function(){
                alert('Page not found');
            },
            504: function(){
                alert('Unknown host');
            }
        },
        success: function(data){
        //alert('Data being returned from server: ' +data.toSource());
        //alert('Data being returned from server: ' +data.toSource());
        //alert(data);
        callbackData = data;

    }
    });

    return callbackData;
}

但是,当我以编程方式更改web服务url以保留错误的值时,并且在调用html页面时,我能够在firebug控制台中看到错误消息,但是我的代码段似乎根本没有捕获到该错误。

例如,在调用GEONames API时,我在Firebug的控制台中遇到“ 407需要授权”的提示。但是,即使我在错误块中处理了该状态代码,也没有触发。这是什么原因?

我们没有有效解决这些HTTP错误的全面解决方案吗?

我认为您的代码存在一些问题……首先,如何调用handleError 因为您调用了一个名为handleError的方法,但未传递任何信息……我假设您使用的是.ajax()

您应该这样做:

$.ajax({
  statusCode: {
    404: function() {
      alert('page not found');
    },
    500: function() {
      alert('server error');
    }
  },
  success : {
      alert('it working');
  },
  complete : {
      alert('im complete');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM