【问题标题】:Ajax in javascript return undefinedjavascript中的Ajax返回未定义
【发布时间】:2021-06-08 14:37:49
【问题描述】:

我有这个带有 ajax 的 javascript 函数调用 .php 调用类 .php 中的函数,但是 console.log 是未定义的

    function SpinTimeTotal(){
        $.ajax({
       type:"POST",
       url: "app/get_SpinTimeTotal.php",
       success: function($a){
            return $a;
        }
    });
    }

spinTimeTotal = SpinTimeTotal();
console.log(spinTimeTotal);    //undefined

调用这个 php 代码

<?php
include_once "read_spindata.php";
$a = read_data_spin :: read_Timespin();
?>

调用这个函数

<?php
class read_data_spin{
public static function read_Timespin(){
        try{
            $conexion = new PDO("mysql:host=localhost; dbname=dbname", "user", "pass");
        } catch (PDOException $ex) {
            echo "Conexion fallida". $ex -> getMessage();
            die();
        }
        $spinTimeTotal = $conexion -> query("SELECT spinTimeTotal FROM data_ruleta ORDER BY id DESC limit 1");
        return $spinTimeTotal;
    }
}

【问题讨论】:

  • 您的 PHP 代码没有发送响应。你需要一个echo 在某个地方。

标签: javascript php ajax


【解决方案1】:

SpinTimeTotal() 是一个异步函数,该语句不会等到执行。

spinTimeTotal = SpinTimeTotal();

您应该改用延迟对象或承诺。

function SpinTimeTotal()
{
    var deferred = jQuery.Deferred();
    $.ajax(
    {
        type: "POST",
        url: "app/get_SpinTimeTotal.php",
        success: function($a)
        {
            return deferred.resolve($a);
        }
    });
    return deferred.promise();
}

您的实际函数调用将是:

$.when(SpinTimeTotal()).then(function(data)
{
    console.log(data);
});

【讨论】:

【解决方案2】:

你需要echo你的php脚本中的结果,比如

<?php
include_once "read_spindata.php";
$a = read_data_spin :: read_Timespin();
echo $a;
?>

在大多数情况下,返回的不仅仅是单个值。那么 JSON 是首选格式:

echo json_encode($resultObject);

当然,您还需要更改 Ajax 调用,例如:

    function SpinTimeTotal(){
        $.ajax({
       type:"POST",
       url: "app/get_SpinTimeTotal.php",
       success: function($a){
          console.log($a);
        }
    });
    }

您的全局范围内的console.log 将在 Ajax 成功函数完成其工作之前被触发。即便如此,也无法从全局范围中获取返回值。

从 AJAX 函数“返回”结果值的唯一方法是进入异步函数,请参阅此处的工作示例:What is different between Fetch and jQuery Ajax post?

【讨论】:

  • 如果你只是在 PHP 脚本中 echo 123; 会发生什么?是您的 AJAX 调用接收到的吗?
  • 致命错误:未捕获错误:无法将 PDOStatement 类的对象转换为字符串
【解决方案3】:

尝试 $a 不使用 $ ,只需 a

function SpinTimeTotal(){
       $.ajax({
       type:"POST",
       url: "app/get_SpinTimeTotal.php",
       success: function(a){
            return a;
        }
    });
}

【讨论】:

  • 未定义 :(
  • $a 是 JavaScript 中的有效变量名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多