Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法识别JSON提要对象中的Javascript变量_Javascript_Json_Javascript Objects - Fatal编程技术网

无法识别JSON提要对象中的Javascript变量

无法识别JSON提要对象中的Javascript变量,javascript,json,javascript-objects,Javascript,Json,Javascript Objects,我使用2个JSON提要来检查日期,并根据当前日期和其中一个对象中的日期显示其中的数据,但由于某些原因,变量c(对象)未定义。当我用硬编码的URL替换'elements'函数中的数据时,一切正常,但我不确定为什么数据没有存储在c对象中: jQuery(function ($) { var url1 = 'feed1.json'; var url2 = 'feed2.json'; var id = shop_id.replace(/\[|\]|\"/g, ''); v

我使用2个JSON提要来检查日期,并根据当前日期和其中一个对象中的日期显示其中的数据,但由于某些原因,变量c(对象)未定义。当我用硬编码的URL替换'elements'函数中的数据时,一切正常,但我不确定为什么数据没有存储在c对象中:

jQuery(function ($) {
    var url1 = 'feed1.json';
    var url2 = 'feed2.json';
    var id = shop_id.replace(/\[|\]|\"/g, '');
    var c = {};
    var logo;

    $.when(request1(), request2()).done(function (r1, r2) {
        var results1 = $.grep(r1[0], function (e) {return e.id == id});
        var results2 = $.grep(r2[0], function (e) {return e.shop_id == id});
        var fallback = $.grep(r2[0], function (e) {return e.PSN == 'fallback160'});

        if (!$.isEmptyObject(results2)) {

            if (!$.isEmptyObject(results1)) {

                var today = new Date();
                var endDate = formatDate(results1[0].Ende);
                var startDate = formatDate(results1[0].Start);

                console.log(endDate);
                console.log(startDate);

                if (today <= endDate && today >= startDate) {
                    c = {'one': results1[0].INC_Suffix, 'separator': ' bis ', 'two': results1[0].Ende, 'link': results1[0].Deeplink, 'logo': results2[0].logo_url};
                    elements();
                }

            }
            else {
                c = {'one': results2[0].STD_INC_Factor, 'separator': ' ', 'two': results2[0].STD_INC_Suffix, 'link': results2[0].deeplink, 'logo': results2[0].logo_url};
                elements();
            }
        }
        else {
            $('#clicktag').html('<img src="' + fallback[0].logo_url + '">').attr('href', clicktag + encodeURIComponent(fallback[0].deeplink));
        }

        //resize fonts based on height of the container
        var intBoxHeight = $('#interupter').height();
        var intInnerHeight = $('#interupterInner').height();
        var intFontSize = parseInt($('#interupterInner').css('font-size'));

        while (intInnerHeight > intBoxHeight) {
            --intFontSize;
            $('#interupterInner').css('font-size', intFontSize + 'px');
            intBoxHeight = $('#interupter').height();
            intInnerHeight = $('#interupterInner').height();
        }

    }).fail(function () {
        c = {'one': 'DIE BESTEN', 'separator': ' ', 'two': 'ANGEBOTE', 'link': '#', 'logo': 'img/fallback.png'};
        elements();
    })

    function elements () {
        $('#storeLogo span').html('<img src=\'' + c.logo + '\'>');
        $('#interupterInner').html(c.one + c.separator + c.two);
        $('#clicktag').attr('href', clicktag + encodeURIComponent(c.link));
        tl.play();    
    }

    function formatDate (d) {
        var part = d.split('.');
        return new Date(part[1] + '.' + part[0] + '.' + part[2]);
    }

    console.log(elements());
    function request1 () {return $.getJSON(url1)};
    function request2 () {return $.getJSON(url2)};

})
jQuery(函数($){
var url1='feed1.json';
var url2='feed2.json';
var id=shop\u id.replace(/\[\]\\“/g,”);
var c={};
var标志;
$.when(request1(),request2()).done(函数(r1,r2){
var results1=$.grep(r1[0],函数(e){returne e.id==id});
var results2=$.grep(r2[0],函数(e){returne e.shop_id==id});
var fallback=$.grep(r2[0],函数(e){returne e.PSN=='fallback160'});
如果(!$.isEmptyObject(结果2)){
如果(!$.isEmptyObject(结果1)){
var today=新日期();
var endDate=formatDate(results1[0].Ende);
var startDate=formatDate(结果1[0]。开始);
console.log(endDate);
控制台日志(起始日期);
如果(今天=开始日期){
c={'one':results1[0]。INC_后缀'separator':'bis','two':results1[0]。Ende,'link':results1[0]。Deeplink,'logo':results2[0]。logo_url};
元素();
}
}
否则{
c={'one':results2[0]。STD_INC_因子,'separator':'','two':results2[0]。STD_INC_后缀,'link':results2[0]。深度链接,'logo':results2[0]。logo_url};
元素();
}
}
否则{
$('#clicktag').html(''.attr('href',clicktag+encodeURIComponent(fallback[0].deeplink));
}
//根据容器的高度调整字体大小
var intBoxHeight=$(“#interrupter”).height();
var intInnerHeight=$('#interupteriner').height();
var intFontSize=parseInt($('#interupteriner').css('font-size'));
while(intInnerHeight>intBoxHeight){
--字体大小;
$('#interupteriner').css('font-size',intFontSize+'px');
intBoxHeight=$(“#中断器”).height();
IntinerHeight=$(“#Interupteriner”).height();
}
}).fail(函数(){
c={'one':'DIE BESTEN','separator':'','two':'ANGEBOTE','link':'#','logo':'img/fallback.png'};
元素();
})
功能元素(){
$('#storeLogo span').html('');
$('#interupteriner').html(c.one+c.separator+c.two);
$('#clicktag').attr('href',clicktag+encodeURIComponent(c.link));
tl.play();
}
函数格式化日期(d){
变量部分=d.分割('.');
返回新日期(第[1]+'..+部分[0]+'.+部分[2]);
}
log(elements());
函数request1(){return$.getJSON(url1)};
函数request2(){return$.getJSON(url2)};
})

< /代码> 您确定您是否正确加载<代码> jQuery < /代码>?尝试在服务器中放置<代码> jQuery .min js <代码>文件,并将其加载到您的域中。

当我读取代码时,我想知道您是否计划在其他地方使用变量<代码> c<代码>?如果没有,请考虑在每个范围内本地声明并传递它。s参数,即
元素(c)

为了便于分析,我还简化了这个示例,因为您似乎只对变量有问题。在下面的简化代码段中,我添加了
return c.one+''+c.two;
,因为
elements()
函数中缺少了它,并且我添加了变量
clicktag
的声明

除此之外,我注意到
console.log(elements());
done
fail
函数之外调用-如果请求运行很长时间,则可能存在争用条件,导致调用日志函数时
c
尚未初始化。如果测试显示是这种情况,则将log语句调用放在每个函数内部(
完成
失败

下面的代码-没有请求延迟-似乎运行良好(Internet Explorer和Chrome-我没有安装Firefox来测试它,也许你可以用下面的代码片段来测试,并让我知道):

jQuery(函数($){
var c={};
var clicktag=”https://stackoverflow.com/questions/47086470/javascript-variable-from-json-feed-object-not-recognized/47089907?noredirect=";
$.when(SampleRequest(1),SampleRequest(2)).done(函数(r1,r2){
c={
‘一’:‘成功——死得最好’,
“分隔符”:“,
“两个”:“ANGEBOTE”,
“链接”:“1#”,
“logo”:“img/fallback.png”
};
元素();
}).fail(函数(){
c={
‘一’:‘失败——死得最好’,
“分隔符”:“,
“两个”:“ANGEBOTE”,
“链接”:“1#”,
“logo”:“img/fallback.png”
};
元素();
})
//更改:注释了tl.play,并添加了return语句
函数元素(){
$('#storeLogo span').html('');
$('#interupteriner').html(c.one+c.separator+c.two);
$('#clicktag').attr('href',clicktag+encodeURIComponent(c.link));
//tl.play();
返回c.1+“”+c.2;
}
函数格式化日期(d){
变量部分=d.分割('.');
返回新日期(第[1]+'..+部分[0]+'.+部分[2]);
}
log(elements());
功能采样器请求(请求ID){
返回“{id:'”+reqId+“}”;
};
})


点击我
猜测一下,请求的结果永远不会满足分配
c
值的条件。我的建议是使用浏览器的JavaScript调试器。对不起,我忘了提到这个问题只发生在Firefox中,在Chrome中它工作得很好。此外,我似乎无法将任何内容登录到控制台。而且控制台中没有其他错误或消息?请检查网络控制台。