【问题标题】:How to catch an error with JSONP if the webservice returns a null result如果 web 服务返回空结果,如何使用 JSONP 捕获错误
【发布时间】:2012-09-11 00:52:50
【问题描述】:

我想在 URL 提供的数据不存在时显示错误。我已经尝试使用以下代码,但它不起作用。

function getNum() {
    var num = document.getElementById('number').value;
    //alert(number);
    $('#shownum').empty();
    $(document).ready(function() {
        $.jsonp({
            url : 'http://localhost/json/num.php?&idnum='+num,
            callbackParameter : 'callback',
            success : function(data, status) {
                $.each(data, function(i, item) {
                    var a = "";
                    var name = item.name;
                    var dob = item.dob;
                    var addr = item.addr;
                    b +='<br>' + name + '<br>';
                    b +=dob + '<br>';
                    b +=addr + '<br>';

                    $('#shownum').append(b);
                });
            },
            error : function() {
                $('#shownum').append('data not found');
            }
        });
    });
}

例如,如果URL 返回?(null);,我如何将错误通知附加到#shownum id

【问题讨论】:

  • $.jsonp 是从哪里来的?而且,为什么需要它?

标签: jquery error-handling jsonp


【解决方案1】:

来自错误回调的 jQuery Ajax 文档:

注意:跨域脚本和 JSONP 请求不会调用此处理程序。

您无法使用 jQuery 的本机方法捕获 JSONP 请求的错误。

jQuery-JSONP 似乎启用了除Opera 之外的所有浏览器的错误处理。如果您遇到问题,我建议您在项目的GitHub 页面上打开一个问题。

【讨论】:

  • 我的意思是如果给定的 url 返回 ?(null);结果,我如何将错误消息附加到#shownum
  • 我不明白。 console.log(arguments) 在您的错误处理程序中,结果是什么?
【解决方案2】:

我处理这个问题的方法是在 JSONP 响应中添加成功字段。试试这样:

{"success":false,"response":"data or objects"}

你应该处理你的消息。

第二种方法是处理成功事件并检查响应是200(即成功)还是例如404(url不存在)。

success(data, textStatus, jqXHR)

如果成功出现问题,请尝试此页面:jQuery Ajax。同样,您感兴趣的参数是 textStatus。

另一种可能是为您的 ajax 调用设置超时:timeout : 5000,。之后,您应该处理错误。当然你只能猜测为什么会超时。

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 2019-07-25
    • 2020-08-21
    • 1970-01-01
    • 2021-12-08
    • 2013-07-16
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多