Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
从Jquery函数中获取值_Jquery_Function - Fatal编程技术网

从Jquery函数中获取值

从Jquery函数中获取值,jquery,function,Jquery,Function,我一直在尝试返回'city'变量的值,但我不断发现奇怪的结果,我知道我的代码一定有问题,我希望你能帮我找出它是什么 function getCity(lat,lng) { var url="http://maps.googleapis.com/maps/api/geocode/json?latlng="; var sensor="&sensor=false"; var city; $.getJSON(url+lat+","+lng+sensor,function(json) {

我一直在尝试返回'city'变量的值,但我不断发现奇怪的结果,我知道我的代码一定有问题,我希望你能帮我找出它是什么

function getCity(lat,lng)
{
var url="http://maps.googleapis.com/maps/api/geocode/json?latlng=";
var sensor="&sensor=false";

var city;
$.getJSON(url+lat+","+lng+sensor,function(json)
    {
        var address=json.results[0].address_components;
        var addr;
        for(var i in address)
            {
                addr=address[i];
                if(addr.types[0] == "locality" && addr.types[1] == "political")
                {
                    city=addr.long_name;

                }
            }
      });
      return city;
}

不要在回调中返回
city
。按如下方式分配: 城市=地址长\名称

因为它仍然在getCity范围内,所以应该正确返回

更新

更改请求数据的方式。这样做:

 $.getJSON(url+lat+","+lng+sensor).done(function(json){

           //Do your assignment here
 });

这是因为它是一个异步调用,所以您希望在完成后分配它。

不要在回调中返回
city
。按如下方式分配: 城市=地址长\名称

因为它仍然在getCity范围内,所以应该正确返回

更新

更改请求数据的方式。这样做:

 $.getJSON(url+lat+","+lng+sensor).done(function(json){

           //Do your assignment here
 });

这是因为它是一个异步调用,所以您希望在完成后分配它。

getcity正在使用异步调用(getJSON),稍后会有结果。。。所以您应该传递将执行该操作的回调

另一种选择是使用同步调用

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
  }
});

但我仍然觉得,你们不应该等待结果,因为浏览器将被挂起,直到结果。。。所以使用回调方法…

getcity正在使用异步调用(getJSON),这将在稍后产生结果。。。所以您应该传递将执行该操作的回调

另一种选择是使用同步调用

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
  }
});

但我仍然觉得,你们不应该等待结果,因为浏览器将被挂起,直到结果。。。因此,使用回调方法…

$。getJson是一个异步函数,这意味着您将返回城市,然后执行success函数(如果调用成功)。你要做的是等电话回来。我认为使用jquery是一种很好的方法:

function getCity(lat,lng)
{
  var def = jQuery.Deferred(); 
var url="http://maps.googleapis.com/maps/api/geocode/json?latlng="
var sensor="&sensor=false";

var city;
$.getJSON(url+lat+","+lng+sensor,function(json)
    {
        var address=json.results[0].address_components;
        var addr;
        for(var i in address)
            {
                addr=address[i];
                if(addr.types[0] == "locality" && addr.types[1] == "political")
                {
                    city=addr.long_name;

                }
            }
        def.resolve(city);

      });
return def.promise();
}

$.when(getCity(40.714623,-74.006605)).then(function (city) {
 alert(city);   
});

$.getJson是一个异步函数,这意味着您返回城市,然后执行success函数(如果调用成功)。你要做的是等电话回来。我认为使用jquery是一种很好的方法:

function getCity(lat,lng)
{
  var def = jQuery.Deferred(); 
var url="http://maps.googleapis.com/maps/api/geocode/json?latlng="
var sensor="&sensor=false";

var city;
$.getJSON(url+lat+","+lng+sensor,function(json)
    {
        var address=json.results[0].address_components;
        var addr;
        for(var i in address)
            {
                addr=address[i];
                if(addr.types[0] == "locality" && addr.types[1] == "political")
                {
                    city=addr.long_name;

                }
            }
        def.resolve(city);

      });
return def.promise();
}

$.when(getCity(40.714623,-74.006605)).then(function (city) {
 alert(city);   
});

getJSON是一个异步调用。因此,您不能像通常的函数那样从
getCity
返回值。在您的情况下,
city
将在getJSON返回任何值之前返回。您需要在回调函数中使用返回值

但是您可以利用jQuery的延迟/承诺,因此不需要深入研究回调函数。你可以试试下面的代码

function getCity(lat,lng) {
    var url="http://maps.googleapis.com/maps/api/geocode/json?latlng=";
    var sensor="&sensor=false";

    return $.getJSON(url+lat+","+lng+sensor);
}

function onSuccess(json) {
    var address=json.results[0].address_components;
    var addr;
    var city;

    for(var i in address) {
        addr=address[i];
        if(addr.types[0] == "locality" && addr.types[1] == "political") {
            city=addr.long_name;
        }
    }

    // And do other stuff
}

function onfail() {
    // Do something if there is a server error with the getJSON
}

getCity(lat, lng).done(onSuccess).fail(onfail);

getJSON是一个异步调用。因此,您不能像通常的函数那样从
getCity
返回值。在您的情况下,
city
将在getJSON返回任何值之前返回。您需要在回调函数中使用返回值

但是您可以利用jQuery的延迟/承诺,因此不需要深入研究回调函数。你可以试试下面的代码

function getCity(lat,lng) {
    var url="http://maps.googleapis.com/maps/api/geocode/json?latlng=";
    var sensor="&sensor=false";

    return $.getJSON(url+lat+","+lng+sensor);
}

function onSuccess(json) {
    var address=json.results[0].address_components;
    var addr;
    var city;

    for(var i in address) {
        addr=address[i];
        if(addr.types[0] == "locality" && addr.types[1] == "political") {
            city=addr.long_name;
        }
    }

    // And do other stuff
}

function onfail() {
    // Do something if there is a server error with the getJSON
}

getCity(lat, lng).done(onSuccess).fail(onfail);


第一次
返回城市之前发生错误。我认为应该是
city=addr.long\u name
-您缺少
=
。请发布服务器发送的JSON字符串,以及一个“奇怪”结果的示例。我认为您应该在满足条件后立即返回值。您不需要等待完成循环。我认为getcity无法返回准确的结果,因为它的异步调用(ajax),稍后将有结果。。。所以你应该通过回调来执行操作…@Mike W:我的JSON没有问题,我使用的是
console.log(city)位于
city=addr.long\u name旁边并且我得到了正确的值。在您第一次返回城市之前有一个错误。我认为应该是
city=addr.long\u name
-您缺少
=
。请发布服务器发送的JSON字符串,以及一个“奇怪”结果的示例。我认为您应该在满足条件后立即返回值。您不需要等待完成循环。我认为getcity无法返回准确的结果,因为它的异步调用(ajax),稍后将有结果。。。所以你应该通过回调来执行操作…@Mike W:我的JSON没有问题,我使用的是
console.log(city)位于
city=addr.long\u name旁边我得到了正确的值。我尝试了,但是我得到了这个错误,
TypeError:$.getJSON(…)。done不是一个函数
请尝试更正它。我尝试了,但是我得到了这个错误,
TypeError:$.getJSON(…)。done不是一个函数
请尝试更正它。延迟/Promise在jQuery的ajax函数中烘焙。您不需要创建和解析自己的延迟对象。@Phil-R:在
Fiddle
上工作正常,但我的firebug返回以下错误:
TypeError:jQuery.Deferred不是构造函数var def=new jQuery.Deferred()有什么建议吗?试试
var def=jQuery.Deferred()没有新的
是的,我的错,没有新的就做吧。我将编辑帖子和提琴。这两个表达式都有效我刚刚有一个旧版本的jquery,它有效。谢谢大家。延迟/Promise在jquery的ajax函数中烘焙。您不需要创建和解析自己的延迟对象。@Phil-R:在
Fiddle
上工作正常,但我的firebug返回以下错误:
TypeError:jQuery.Deferred不是构造函数var def=new jQuery.Deferred()有什么建议吗?试试
var def=jQuery.Deferred()没有新的
是的,我的错,没有新的就做吧。我会编辑帖子和提琴。这两个表达式都有效。我刚刚有一个旧版本的jquery,它有效。谢谢大家。