【问题标题】:Try to return JSON data generated with SQL statement from PHP script to JS webpage but get null instead尝试将使用 SQL 语句从 PHP 脚本生成的 JSON 数据返回到 JS 网页,但改为 null
【发布时间】:2012-05-29 14:06:33
【问题描述】:

我想在按下 Submit 按钮后从 PHP 脚本中生成的 SQL 语句返回 JSON 数据,但我却收到了 null

我将使用返回的 JSON 在我的 Google 地图上过滤显示标记,但现在我只想从 PHP 脚本将数据返回到我的 jQuery 页面,以便我可以操作/使用它.

提交按钮

HTML

<input type="submit" id="filter" value="Filter" />

JS

$('#myform').on('submit', function(e) {
  e.preventDefault();
  var myData = $('#myform').serializeArray();
  $.getJSON('myscript.php', myData, function(json){
    alert(json);// actually filter for later                    
  });   
});

PHP 脚本

// action is a hidden form control I use to check if form was submitted
    if(isset($_POST["action"])){

        if(isset($_POST["color"]) && isset($_POST["zipcode"])){
            // try to open a connection to a MySQL server
            $connection = mysql_connect($host, $username, $password) or die("Could not connect" . mysql_error());
            // select the active MySQL database to work with
            $db_selected = mysql_select_db($database, $connection) or die("Can\'t use db:" . mysql_error());

            $query = 'sql statement to return resutls based on what color and zipcode was provided';
            $result = mysql_query($query) or die("Can\'t do that: " . mysql_error());
        }

        //  close connection to the database


    echo json_encode($result);
    mysql_close($connection);
    }

【问题讨论】:

    标签: php javascript jquery sql ajax


    【解决方案1】:

    您不能直接返回 mysql_query 调用的结果对象。您首先必须使用 mysql_fetch_array 或类似 (PHP docu) 之类的函数对其进行解析。

    ...
    $result = mysql_query($query);
    if ( $result === false ) {
      die("Can\'t do that: " . mysql_error());
    }
    
    $retVal = array();
    while( $row = mysql_fetch_array( $result ) ) {
      $retVal[] = $row;
    }
    
    ...
    echo json_encode( $retVal );
    

    编辑

    根据getJSON (link) 的 jQuery 规范,数据使用 GET 参数发送,而不是使用 POST。因此,您必须将 PHP 代码中的所有 $_POST 外观更改为 $_GET$_REQUEST

    除此之外,如果您的变量未设置,您应该返回一些错误消息。现在(根据您的代码)只返回一个空文档。

    【讨论】:

    • @Bob 你是在最后使用return 语句还是echo?我在那里有短暂的脑滞。
    • @Bob 您是否尝试手动调用 URL 并在那里检查结果?
    • @Bob 好的,所以尝试删除 or die(...) 部分并将检查错误移动到单独的语句中,就像我编辑的代码中一样。
    • @Bob 您尝试按照其他答案中的建议更改标题信息?
    • @Bob 如果此问题中的代码不再是当前代码,请使用新代码打开一个新问题或编辑上述问题。
    【解决方案2】:

    在回显之前你应该声明返回的内容类型:

    header('Content-Type: application/json');
    

    如果你想检查你可以使用的数据的接收:

    $.ajax({
        url: url,
       data: myData,
       success: function(json) {},
       error: function(json) {} // this should allow you to check if data is received (but since the content type is set to text/html and $.getJSON expectr application/json it won't be a success)
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多