使用$ .post方法将函数(data)值返回给变量

时间:2013-03-30 09:30:56

标签: php javascript jquery

亲爱的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进行测试。

所以我猜这一切,希望有人能给我一个解决方案和可能的解释。

3 个答案:

答案 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);
    });
});