jsonpCallback范围故障
我是一个完全的网络开发新手,在以下代码中分配myCountry变量时遇到困难:jsonpCallback范围故障,json,variables,scope,country,Json,Variables,Scope,Country,我是一个完全的网络开发新手,在以下代码中分配myCountry变量时遇到困难: <html> <head> <script> var myCountry=" " function jsonpCallback(data) { myCountry=data.address.country; } jsonpCallback(); var countryText="You are from "+myCountry;
<html>
<head>
<script>
var myCountry=" "
function jsonpCallback(data) {
myCountry=data.address.country;
}
jsonpCallback();
var countryText="You are from "+myCountry;
document.getElementById("displaycountry").innerHTML =countryText;
}
</script>
<script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
type="text/javascript">
</script>
</head>
<center>
<p id="displaycountry" ></p>
</body>
</html>
var myCountry=“”
函数jsonpCallback(数据){
myCountry=data.address.country;
}
jsonpCallback();
var countryText=“您来自”+我的国家;
document.getElementById(“displaycountry”).innerHTML=countryText;
}
我想将data.address.country的值分配给myCountry并在函数外部使用,但该值始终保持为“”
如果我使用以下代码,jsonpCallback函数可以很好地显示国家(但我希望能够修改它在html中的位置):
函数jsonpCallback(数据){
a、 innerHTML=“国家:”+data.address.Country; }
谢谢你,正如@Sirko所提到的,问题是你实际上并没有调用Wipmania api,而是试图将回调函数用作QueryString参数,而仅仅将请求放在
标记上是行不通的
以下是您可能想要做的事情
首先,您需要更改回调函数的标签,因为它将在请求检索到任何数据后执行:
<p id="displaycountry"></p>
<script>
var myCountry = "";
// This is your callback function
function jsonCallback(data) {
myCountry = data.address.country;
var countryText="You are from "+myCountry;
document.getElementById("displaycountry").innerHTML = countryText;
}
// Do the request
// Code below
</script>
希望能有所帮助,对于Javascript的更多基础知识,我推荐一些在线速成课程,也许是一个很好的开始
Cheers正如@Sirko所提到的,问题是您实际上并没有调用Wipmania api,而是试图将回调用作查询字符串参数,而仅仅将请求放在
标记上是行不通的
以下是您可能想要做的事情
首先,您需要更改回调函数的标签,因为它将在请求检索到任何数据后执行:
<p id="displaycountry"></p>
<script>
var myCountry = "";
// This is your callback function
function jsonCallback(data) {
myCountry = data.address.country;
var countryText="You are from "+myCountry;
document.getElementById("displaycountry").innerHTML = countryText;
}
// Do the request
// Code below
</script>
希望能有所帮助,对于Javascript的更多基础知识,我推荐一些在线速成课程,也许是一个很好的开始
干杯问题不在于JSONP回调,而在于您不了解该调用的异步性质。您对myCountry中的内容的分配只是过早的,因此之前没有时间执行回调。问题不是您的JSONP回调,而是您不了解该调用的异步性质。您对myCountry中的内容的分配刚刚开始,因此之前没有时间执行回调。
// This will stablish the Request to the api
var xmlhttp = new XMLHttpRequest();
var url = "//api.wipmania.com/json";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttp.responseText);
jsonCallback(response);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();