0

这是我的代码,

function getMods(name){
    var init;
    $.ajax({
    type: "POST",
    url: "init.php",
    data: { 'id': getID(), 'Name': name },
    cache: false,
    success: function(data)
        {
            return data;
        },
        async:false
    });
}
function init(){
    var gm = '<br/>';
    var gm1 = getMods('Name');
        $('#brand').append(gm1);
    var gm2 = getMods('Owner');
    var gm3 = getMods('Admin1');
    var gm4 = getMods('Admin2');
    var gm5 = getMods('Admin3');
    var gm6 = getMods('Admin4');
    $('#online3').append(gm2 + gm + gm3 + gm + gm4 + gm + gm5 + gm + gm6 + gm);
}

getMods() 返回“未定义”。当我使用此代码时:

alert(data);

该页面提醒了正确的值。

这是 php 文件 init.php:

<?php
include('dbconnect.php');
if(isset($_POST['id']) && isset($_POST['Name'])){
$id = $_POST['id'];
$name = $_POST['Name'];
$init = chatMods($name,$id,$username,$password);
echo $init;
}
?>

我在 getMods() 中添加了异步。

4

1 回答 1

0

您应该区分函数的返回值(getMods()在您的情况下)和回调函数(success)。

在您的代码中,您调用getMods()which 实际上不返回任何值,因此您得到undefined

success回调仅在您的函数已经返回后的一段时间后发生。

一种可能的解决方案(虽然不是最好的,因为它会锁定您的 JS 处理)是以同步方式使用 Ajax 调用。仅在收到来自服务器的应答时才返回的调用。async: false在您的通话中使用$.ajax,捕获您的返回值,然后返回它。请参阅此示例:https ://stackoverflow.com/a/2592780/290343

当然,您应该知道,您的 Ajax 调用可能会失败,您需要考虑到这一点。此外,您的代码可能运行得非常慢,因为它对服务器进行了 6 次远程调用。

于 2013-11-12T06:05:40.400 回答