从$获取变量。在jquery中获取ajax调用

从$获取变量。在jquery中获取ajax调用,jquery,ajax,function,callback,get,Jquery,Ajax,Function,Callback,Get,我知道这上面有很多线索。。但我在ajax方面做得很差,我一生都无法解释答案 var loadUrl = "lib/php/ajax.php"; $.ajaxSetup ({ cache: false }); $.get(loadUrl + href, function(data) { var obj = $.parseJSON(data); console.log(obj.commentCount, obj.fileName); }); conso

我知道这上面有很多线索。。但我在ajax方面做得很差,我一生都无法解释答案

var loadUrl = "lib/php/ajax.php";

$.ajaxSetup ({ cache: false });

$.get(loadUrl +  href, function(data)
{
    var obj = $.parseJSON(data);
    console.log(obj.commentCount, obj.fileName);            
});  console.log(obj.commentCount, obj.fileName); // this one doesn't work.
如何获取函数外部的变量=/我知道我需要使用某种回调函数。。或者先在函数外部声明var obj,然后将其设置为内部数据,并在函数外部引用它

var loadUrl = "lib/php/ajax.php";
var obj = "";

$.ajaxSetup ({ cache: false });

$.get(loadUrl +  href, function(data)
{
    obj = $.parseJSON(data);
    console.log(obj.commentCount, obj.fileName);            
});
console.log(obj.commentCount, obj.fileName);

您不能这样做,原因有二:

$.get之后的代码立即运行。函数中的代码仅在ajax响应返回后运行 var obj是在内部函数的作用域内创建的,因此无法在外部访问。
实现此功能的唯一方法是在ajax请求之外声明obj,在函数中指定值,并将ajax请求设置为非异步,尽管这有点违背了使用ajax的目的,并将阻止站点,直到返回结果。

在ajax调用完成后执行回调。将首先调用上一个console.log语句,因为ajax请求是异步进行的。另一个问题是obj属于回调的范围,这使得它在外部不可用。如果您在回调之外声明它,它将可用,但由于第一个问题仍然不可用。它将是空的,直到ajax调用完成。在回调中执行工作有什么问题?

在调用$.get函数之前,这仍然执行第二个console.log=/这将不能作为第二个“console.logobj.commentCount,obj.fileName;”将在返回ajax响应之前运行,因此不会设置obj。为什么在同一数据上调用外部和内部的console.log?目的是什么?也许我可以对两次调用同一数据的目的做更多的解释。这不能作为第二个“console.logobj.commentCount,obj.fileName;”将在返回ajax响应之前运行,因此不会设置obj。此示例仍然在第一个之前调用第二个console.log=我知道您在那里做了什么。。那很有趣。你把它推出一个不同的功能。这仍然和以前差不多,只是它调用的是命名函数而不是匿名函数。外部obj变量仍然没有值。@Richard,是的,obj现在没用了,我会把它编辑掉。就实践而言,这是最好的方法;如果可以避免的话,最好不要污染全局变量空间。我已经将async改为false很好,但我猜我不应该养成这样做的习惯?值true或false之间的差异不是100%。如果为false,则在返回ajax响应之前,页面上不会发生其他任何事情。如果这需要很长时间,浏览器可能会冻结。最好的方法是充分利用回调函数来运行依赖于ajax结果的代码。这就是我最后做的。我在回叫中做了这项工作
var loadUrl = "lib/php/ajax.php";

function processAjaxResponse(obj)
{
  console.log(obj.commentCount, obj.fileName);
};

$.ajaxSetup ({ cache: false });

$.ajax({
    type: 'GET',
    dataType: 'JSON',
    url: loadUrl +  href,
    success: function(data) {
       processAjaxResponse(data);
   }
});