php - 从 Ajax/PHP 调用 MySQL SP 返回空值

标签 php jquery mysql ajax

几天来我一直在研究这个问题,所以是时候寻求帮助了。我正在尝试使用 Ajax/PHP/MySQL 根据用户在下拉列表中的选择仅显示表格的一个子集。 PHP 代码调用 MySQL 存储过程。我构建的调用是正确的,如果我回显它然后复制它并按原样从 phpMyAdmin MySQL 控制台运行它,我会得到我期望的结果。但是从 Ajax 调用的 PHP 代码中,我看到了这个结果(在我对它进行 JSON_encode 之后在 Firebug 中回显):

{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}

页面本身的相关部分是:

    <script>
    function updateActions() {
    var results = '';
    var success = false;
    var selectedIssues = getIssues();
    var fnargs = "GetActions|'" + selectedIssues + "'";

    $.ajax({
        url: 'retrievedata.php',
        type: "POST",
        async:false,
        data: {"functionname":"getactions", "arguments":fnargs},
        dataType: "JSON",
        complete: function (obj, textStatus) {
                      if( (obj.error != '') ) { 
                        alert(JSON.parse(obj));
                        $("#testresult").text(textStatus);
                      }
                      else {
                        $("#testresult").text("Error");
//                      console.log(obj.error);
                      }
                      success = true;
                },
         error: function(textStatus, errorThrown) {
             success = false;
             $("#testresult").text('Error occurred: '.textStatus);
         }            
        })

    };
    </script>

两个注意事项。首先,它调用的 getIssues 脚本返回预期值。其次,我实际上并没有编写正确的代码来处理我得到的结果。仍在尝试将正确的结果返回到页面。

页面 retrievedata.php 看起来像这样:

<?php

    include "dbfns.php";

    $aResult = array();
    $returnval = 'before tests';

    if( !isset($_POST['functionname']) ) { 
        $aResult['error'] = 'No function name!'; 
        }

    if( !isset($_POST['arguments']) ) { 
        $aResult['error'] = 'No function arguments!'; 
        }

    if( !isset($aResult['error']) ) {

        $functionName = $_POST['functionname'];
        $argsarray = explode('|', $_POST['arguments']); 
        $argcount = count($argsarray);
        $returnval = 'before switch';

        switch($_POST['functionname']) {
            case 'getactions':
               if( $argcount < 2 ) {
                   $returnval = 'too few arguments';
               }
               else {
                   $returnval = 'in else';
                   $returnval = getactions($argsarray[0], $argsarray[1]);
               }
               break;

            default:
               $returnval = 'function not found';
               break;
        }

    }

    return $returnval;
    ?>

dbfns.php 的相关部分(当然删除了识别数据和凭据)是:

<?php

function connect2db() {
    $hostname = "XXX";
    $username = "XXX";
    $password = "XXX";
    $database = "XXX";
    $conn = mysqli_connect($hostname, $username, $password, $database);

    if( $conn == false ) {
         echo "Connection could not be established.<br />";
         die( print_r( myslqi_connect_error(), true));
    }

    return $conn;
}

function getactions($spname, $params, $errorstring = 'Unable to retrieve requested data') {
    $conn = connect2db();
    $query = "CALL ".$spname."(".$params.")";
    echo $query."\r\n";
    $result = mysqli_query($conn, $query);

    if ($result == false) {
        $errmessage = mysqli_error($conn);
        $allresult = $errmessage;
        echo $errmessage;
        die( print_r( mysql_error(), true));
    }
    else {
        echo "In else case\r\n";    
        $allresult = json_encode($result);              
    }           

    echo $allresult;
    return $allresult;
}

?>

我在 retrievedata 中有另一个 PHP 函数,它调用同一个 MySQL SP,但不是来自 Ajax,它返回预期的结果,所以我非常有信心 SP 会达到我的预期。

我认为关于如何从 Ajax 执行所有这些操作,我一定有一些不明白的地方。

编辑:只是想补充一点,我已经尝试在 ajax 调用中成功而不是完成,以及 _GET 而不是 _POST。结果没有变化。

最佳答案

看起来它正在序列化 mysqli_query() 的结果对象。我不确定它在内部做了什么,但在您枚举/获取结果之前它可能不会返回实际的结果数据。

参见 this example一种将其转换为 JSON 结果的方法。

关于php - 从 Ajax/PHP 调用 MySQL SP 返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785012/

相关文章:

javascript - jQuery 附加选择选项 - 选择不起作用

javascript - 使用 .html() 选择后的 jQuery 编辑 innerHTML

javascript - 使用 head.js 以正确的顺序正确加载脚本和依赖项?

php - Magento 加入不同的表

php - select2 依赖于另一个字段的字段

php - 使用 preg_match 来匹配此特定模式

php - Laravel APP_URL 没有改变

php - 在表中找不到条目时的 Laravel undefined variable

php - 使用准备好的语句进行多次插入

php - 使用 PHP 和 MySQL 处理空间数据时出现的问题