Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
jsonpCallback范围故障_Json_Variables_Scope_Country - Fatal编程技术网

jsonpCallback范围故障

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;

我是一个完全的网络开发新手,在以下代码中分配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();