Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Javascript 将异步jsonp结果分配给变量_Javascript_Asynchronous_Jsonp - Fatal编程技术网

Javascript 将异步jsonp结果分配给变量

Javascript 将异步jsonp结果分配给变量,javascript,asynchronous,jsonp,Javascript,Asynchronous,Jsonp,我有一个异步jsonp调用,并尝试将结果分配给下面示例中的变量“FILL_ME” onSuccess函数被称为successful,但无法将其值赋给变量“FILL_ME”。而是引发错误:Uncaught TypeError:无法读取未定义的属性“0”,这似乎是一个范围问题 请看一下下面的代码 在onSuccess方法之前触发console.log(“final”+FILL_ME) 如何将结果分配给变量 函数foo(){ var FILL_ME='覆盖我'; var$jsonp=(函数(){ v

我有一个异步jsonp调用,并尝试将结果分配给下面示例中的变量“FILL_ME”

onSuccess函数被称为successful,但无法将其值赋给变量“FILL_ME”。而是引发错误:Uncaught TypeError:无法读取未定义的属性“0”,这似乎是一个范围问题

请看一下下面的代码

在onSuccess方法之前触发console.log(“final”+FILL_ME)

如何将结果分配给变量

函数foo(){
var FILL_ME='覆盖我';
var$jsonp=(函数(){
var,它={};
that.send=函数(src,选项){
var callback_name=options.callbackName | |'jsonCallback',
on_success=options.onSuccess | | function(){},
on_timeout=options.onTimeout | | function(){},
超时=选项。超时| | 10;//秒
var timeout_trigger=window.setTimeout(函数(){
window[callback_name]=函数(){};
on_timeout();
},超时*1000);
窗口[callback_name]=函数(数据){
clearTimeout(超时\u触发器);
关于成功(数据);
}
var script=document.createElement('script');
script.type='text/javascript';
script.async=true;
script.src=src;
document.getElementsByTagName('head')[0].appendChild(脚本);
}
归还;
})();
$jsonp.send('https://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json', {
callbackName:'jsonCallback',
onSuccess:函数(json){
log('onSuccess!'+json);
FILL_ME=json[“站点”][0][“站点名称”];
控制台日志(填写);
},
onTimeout:function(){
log('onTimeout!');
填充我=“”;
控制台日志(填写);
},
超时时间:5
});
控制台日志(“最终”+填充)
}

无法读取未定义的属性“0”

是指您尝试访问从jsonp调用返回的数据的位置,特别是尝试访问数组的属性0的位置:

json[“站点”][0][“站点名称”]

这意味着
json[“站点”]
未定义。可能是因为
站点之后有额外的空间。如果删除该空间,它似乎可以正常工作:

如果要在
onSuccess
回调函数之外使用变量,则必须编写另一个调用的方法并传入
FILL\u ME
,如下所示:

function runAfterSuccess(p_FILL_ME) {
  console.log("Here I can do whatever I want with FILL_ME", p_FILL_ME);
}
然后在
onSuccess
回调中使用:


runAfterSuccess(填充)

错误是说
json[“sites”]
未定义,所以我想看看为什么会这样。谢谢。我修好了。问题仍然存在。谢谢你的回答。这是真的。然而,问题来自不同的性质。当您查看页面底部并查看最终的console.log时=>您正在调用的代码中的console.log(“final”+FILL\u ME)
console.log(“final”+FILL\u ME)
在回调之外,因此它当然会在被覆盖之前运行。
console.log(填充我)正在按预期工作,这就是控制台中显示
SitePoint
的原因。@AppRoyale更新的答案&plunkr以解决您的原始问题。