php - 为什么这会返回我 'undefined'

标签 php javascript jquery ajax scope

尝试运行一个脚本(test.al();),在 test.al 中,其名为 getcrypt.php();,php 脚本位于网络服务器上,并且正在运行。目前,这些是我的脚本

JS

var getcrypt = {
    php: function () {

        $.ajax({
            url: "server.com/return.php",
            type: "POST",
            async: true,
            data: "id=getit",
            success: function (msg) {
                var v = msg.match(/^.*$/m)[0];
                return v;
            }
        });
    }
}

var test = {
    al: function () {
        a = getcrypt.php();
        alert(a);
    }
}

PHP

<?php
    $id = $_POST['id'];
    if ('getit' == $id){
        $value = 'VALUE';
        echo $value;
    }else{
        echo 0;
    }
?>

这样,它会显示一个带有“unidefined”的警报,如果我添加一个alert(v);在 return v 之前,它会显示“VALUE”,但无法在变量之外使用它...

var getcrypt = {
    php: function () {

        $.ajax({
            url: "server.com/return.php",
            type: "POST",
            async: true,
            data: "id=getit",
            success: function (msg) {
                var v = msg.match(/^.*$/m)[0];
                alert(v);
                return v;
            }
        });
    }
}

这会给我一个带有正确值的警报(在“未定义”之后)

最佳答案

这是因为您正在进行异步调用。返回仅针对 success 函数,不针对 php 函数。

要获取该值,您需要编写:

var value;

var getcrypt = {
  php: function (callback) {

    $.ajax({
        url: "",
        type: "POST",
        async: true,
        data: "id=getit",
        success: function (msg) {
            var v = msg.match(/^.*$/m)[0];
            alert(v);
            callback(v);
        }
    });
  }
}

getcrypt.php(function(v) {
  alert(v);
  // This happens later than the below
  value = v;
});

// The below will still not work since execution has already passed this place
// alert will still return undefined
alert(value);

关于php - 为什么这会返回我 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893599/

相关文章:

javascript - 当我点击添加更多按钮时,新的日期选择器字段被添加,以前的日期选择器值被重置

php - 电报机器人 : using offset in getUpdates method

javascript - jQuery 加载外部 HTML 文件但在页面刷新后不会保持静止

javascript - 连续调用javascript函数直到条件

jquery - 修复了 Bootstrap 中的表标题行

php - 如何解决创建多个静态页面的问题

php - 如何按两列对查询进行计数和分组?

javascript - 从 Thunderbird 保存电子邮件正文及其附件

javascript - 检查 p :fileUpload component contains any file to upload, 是否改变背景

javascript - Javascript 表单验证