亲爱的Coders!
我的代码的目的:
获取特定文件夹中列出的文件的URL,然后在javascript中将它们分配给数组。
我如何想象它:
test.php
中的JavaScript函数使用$.post()
方法将值发送到getURL.php
文件。在此之后,getURL.php
使用此值来获取特定文件夹中的特定文件URL。我在$.post()
方法function(data)
参数中获得了结果。在此之后,"数据"的结果值。在JavaScript中是(/将被使用)。
问题:
在$.post()
方法函数内部:function(data,status) I'm satisfied with the result of the returned value of the data parameter; the PROBLEM is that I can't assign it's value outside this function:
函数(数据,状态)`。
test.php的
<script src="jquery-1.9.1.js">
</script>
<script type="text/javascript">
var imgPath; // <--He is who should get the value of "data"
function getTargetUrl(szolg){
$.post(
"getURL.php",
{ x: szolg },
function(data,status){
alert("in function: " + data + " status: " + status);
imgPath=data;
alert (imgPath);
}
);
}
$(document).ready(function() {
var a="szolg5"; //it will be "user defined", used in getURL.php
getTargetUrl(a);
alert(imgPath);
});
</script>
getURL.php
<?php
if(isset($_POST["x"])){
$queryGlob='img/'.$_POST["x"].'/batch/*.jpg';
foreach (glob($queryGlob) as $filename) {
$imgFiles=json_encode($filename);
$imgFiles=str_replace('\/','/',$imgFiles);
echo $imgFiles;
}
//$data = str_replace('\\/', '/', json_encode(glob('img/'.$_POST["x"].'/batch/*.jpg')));
}
else{
$imgFiles="FAIL";
echo $imgFiles;
}
?>
注意:我正在使用Google Chrome进行测试。
所以我猜这一切,希望有人能给我一个解决方案和可能的解释。
答案 0 :(得分:1)
post
来电是异步,所以在您的代码中:
$(document).ready(function() {
var a="szolg5"; //it will be "user defined", used in getURL.php
getTargetUrl(a);
alert(imgPath);
});
... alert
在<{strong> post
调用完成之前发生,因此会显示imgPath
的旧值。你想要做的是将一个函数传递给getTargetUrl
,它将在post
完成时调用,并将后续代码放在那里。
这样的事情:
var imgPath; // <--He is who should get the value of "data"
function getTargetUrl(szolg, callback){
$.post(
"getURL.php",
{ x: szolg },
function(data,status){
alert("in function: " + data + " status: " + status);
imgPath=data;
callback();
}
);
}
$(document).ready(function() {
var a="szolg5"; //it will be "user defined", used in getURL.php
getTargetUrl(a, function() {
alert(imgPath);
});
});
你完全可以通过执行post
所做的事情并将数据作为参数传回来取消全局变量:
function getTargetUrl(szolg, callback){
$.post(
"getURL.php",
{ x: szolg },
function(data,status){
alert("in function: " + data + " status: " + status);
callback(data);
}
);
}
$(document).ready(function() {
var a="szolg5"; //it will be "user defined", used in getURL.php
getTargetUrl(a, function(path) {
alert(path);
});
});
答案 1 :(得分:0)
不,AJAX是异步的,意味着$.post
方法将立即返回。如果你想使用AJAX调用的结果,唯一安全的地方就是成功回调。不要尝试将结果分配给全局变量。
因此,您应该将警告置于成功回调中。
答案 2 :(得分:0)
正如其他人所解释的那样,这种行为的原因是ajax请求的异步性质。
我的解决方案是从getTargetUrl
返回ajax promise请求并使用它来注册回调方法
function getTargetUrl(szolg){
return $.post(
"getURL.php",
{ x: szolg },
function(data,status){
alert("in function: " + data + " status: " + status);
alert (data);
}
);
}
$(document).ready(function() {
var a="szolg5"; //it will be "user defined", used in getURL.php
getTargetUrl(a).done(function(data){
alert('from callback' + data);
});
});