我想通过使用对php文件的ajax post调用来检索服务器上图像的高度和宽度,该文件返回双管分隔的字符串'width || height'
我的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 ;
}
任何人都能告诉我我做错了什么?
答案 0 :(得分:2)
您误解了AJAX调用的工作方式。 AJAX中的第一个“A”代表异步,这意味着请求独立于您运行的代码线程。这就是回调在AJAX方面如此之大的原因,因为你不知道什么时候完成任务。与此同时,您的代码仍在继续。
在您的代码中,您尝试为变量aOrgdimensions
分配一个在请求完成之前您将不会知道的值。有两种解决方案:
修改您的逻辑以协调回调的概念,并在请求完成后执行您的操作。
不太优选,让您的请求同步。这意味着代码和页面将在请求点“挂起”,并且只有在它结束时才会继续。这是通过将async: false
添加到jQuery选项来完成的。
答案 1 :(得分:0)
用于异步解释的Thanx。我没有意识到这一点,但至少现在我知道为什么我的变量不可用。
编辑:想出来。使用了建议的回调函数,一切都很好。 :d