稍后抓住jquery ajax错误

时间:2015-05-09 15:38:19

标签: javascript jquery ajax

我尝试向freebox发出http请求(我不知道它是否存在于法国境外)

freebox不会访问CORS请求,但她按照我的意愿行事。

例如,如果我提出权力请求:

http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1

freebox播放器启动,我有一个CORS错误:

  

XMLHttpRequest无法加载http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点'null'访问。

没关系,但我会检查此请求的http标头,例如,如果我检查我的代码是否正常,则freebox会返回403以查找错误代码。

我试图用Jquery获取statusCode:

            xhr = $.ajax({
            method: "GET",
            url: url,
            crossDomain: true,
            statusCode: {
                500: function () {
                    alert("Une erreur s'est produite !");
                },
                403: function(){
                    alert("aaaaa")
                    throw new badTelecommandeCode();
                },
                404: function(){
                    throw new freeboxNotFound();
                },
                0: function(){console.log(0)}
            },
            error: function (err) {
                console.log(err);
            }
        });

此时,状态代码为0,并且“错误”不会启动。我在控制台中出现此错误:

  

XMLHttpRequest无法加载http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。响应的HTTP状态代码为403。

您可以看到此答案的结尾

  

“响应的HTTP状态代码为403.”。   就在jquery写错误之前(红色):

GET http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1 

我试图抓住错误:

        try{
        xhr = $.ajax({
            method: "GET",
            url: url,
            crossDomain: true,
            statusCode: {
                500: function () {
                    alert("Une erreur s'est produite !");
                },
                403: function(){
                    alert("aaaaa")
                    throw new badTelecommandeCode();
                },
                404: function(){
                    throw new freeboxNotFound();
                }
            },
            error: function (err) {
                console.log(err);
            }
        });
    }
    catch(err){
        console.log(err);
    }

我已经尝试搜索错误已经被jquery捕获的地方:

http://code.jquery.com/jquery-2.1.4.js line 8634

您是否找到了捕获CORS消息并解析它或捕获jquery消息的方法,以及为什么不获取statusCode或任何信息。

对于小型控制器,“向freebox开发者发送接受CORS的请求”的方式已经制定,但没有答案。我无法通过网络服务器。

我当前的挑战是:“我是一个lambda用户会看到我的电视,但我的免费电视遥控器无法正常工作,我可以通过我的智能手机/电脑轻松制作”

UPDATE1 : 我举了一个例子:

如果它运作良好:

    xhr = $.ajax({
    method: "GET",
    url: "http://hd1.freebox.fr/pub/remote_control?code=5818261&key=right&long=false&repeat=1",
    crossDomain: true,
    statusCode: {
        500: function () {
            alert("Une erreur s'est produite !");
        },
        403: function(){
            alert("badTelecommandeCode")
        },
        404: function(){
            alert("freeboxNotFound")
        }
    },
    error: function (err) {
        // console.log(err);
    },
    fail:function(jqxhr, textStatus, errorThrown) {
        // console.log(errorThrown);
    }
});

好的密钥,良好的代码,我的电视制作动作,并返回CORS错误 CORS Without http error

如果代码不好,或者密钥不存在,我会抓住:

        xhr = $.ajax({
    method: "GET",
    url: "http://hd1.freebox.fr/pub/remote_control?code=5818261&key=ping",
    crossDomain: true,
    statusCode: {
        500: function () {
            alert("Une erreur s'est produite !");
        },
        403: function(){
            alert("badTelecommandeCode")
        },
        404: function(){
            alert("freeboxNotFound")
        }
    },
    error: function (err) {
        // console.log(err);
    },
    fail:function(jqxhr, textStatus, errorThrown) {
        // console.log(errorThrown);
    }
});
xhr = $.ajax({
    method: "GET",
    url: "http://hd1.freebox.fr/pub/remote_control?code=222222&key=ping",
    crossDomain: true,
    statusCode: {
        500: function () {
            alert("Une erreur s'est produite !");
        },
        403: function(){
            alert("badTelecommandeCode")
        },
        404: function(){
            alert("freeboxNotFound")
        }
    },
    error: function (err) {
        // console.log(err);
    },
    fail:function(jqxhr, textStatus, errorThrown) {
        // console.log(errorThrown);
    }
});

CORS error with http status error 我有一个CORS,没问题,但我怎么能抓住文本,说出http状态。

有关信息: freebox.fr是NAT规则,重定向到我的路由器(freebox),hdX.freebox.fr转到电视播放器高清号码X的API

1 个答案:

答案 0 :(得分:0)

仍然不确定解释问题是否正确。似乎没有url返回的回复。 0似乎不是有效的HTTP响应代码,请参阅HTTP status code 0 - what does this mean for fetch, or XMLHttpRequest?error已登录console

GET http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1 net::ERR_CONNECTION_TIMED_OUT 

在下面的请求之后

var xhr = new XMLHttpRequest();
 xhr.open("GET", "http://hd1.freebox.fr/pub/remote_control?code=5818260&key=power&long=false&repeat=1", true);
 xhr.onload = function() {
   console.log(this.status)
 }
 xhr.onerror = function(e) {
   console.log(e, this.status)
 }
 xhr.send();