2010-07-14 104 views
0

我想检索一个服务器上的图像的高度和宽度通过使用ajax后调用一个PHP文件,它返回一个双管道分隔字符串'宽度||高度'如何获取jquery post返回值?

我的javascript正确警告请求字符串从PHP文件,所以信息现在在我的脚本,但我似乎无法访问$ .post函数外。

这工作:

var getImagesize = function(sFilename) 
    { 
    $.post("getImagesize.php", { filename: sFilename, time: "2pm" }, 
    function(data){ 
     alert(data.split('||'));   
    }); 
    } 

但检索是一个不同的问题:

// this line calls the function in a loop through images: 

var aOrgdimensions = getImagesize($(this, x).attr('src')) ; 
alert(aOrgdimension); 

// the called function now looks like this: 
     var getImagesize = function(sFilename) 
     { 
     var aImagedims = new Array(); 
     $.post("getImagesize.php", { filename: sFilename }, 
     function(data){ 
      aImagedims = data.split('||');   
     }); 
     return "here it is" + aImagedims ; 
     } 

任何人能告诉我什么,我做错了什么?

回答

2

您误解了AJAX调用的工作方式。 AJAX中的第一个“A”代表异步,这意味着请求独立于正在运行的代码线程。这就是回调对于AJAX来说如此之大的原因,因为你不知道什么时候完成了某些事情。与此同时,您的代码继续愉快地继续。

在你的代码中,你试图分配一个变量,aOrgdimensions一个你不知道的值,直到请求完成。有两种解决方案:

  1. 修改您的逻辑以调和回调的概念并在请求完成后执行您的操作。

  2. 不太好,让您的请求同步。这意味着代码和页面将在请求点处“挂起”,并且只有在结束时才进行。这是通过将async: false添加到jQuery选项来完成的。

0

Thanx为异步解释。我没有意识到,但至少现在我知道我的变数为什么不可用。

编辑:想出来。按照建议使用回调函数,一切正常。 :D