1

我想在按下提交按钮时从 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);
    }
4

2 回答 2

2

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

...
$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。因此,您必须将$_POSTPHP 代码中的所有外观更改为$_GET$_REQUEST.

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

于 2012-05-29T14:10:31.857 回答
1

在 echo 之前,您应该声明返回的内容类型:

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)
});
于 2012-05-29T14:11:22.733 回答