ajax到php并从中获取JSON

时间:2013-03-06 21:09:31

标签: php jquery json

我有一个php文件,我用ajax连接到它,回调值是JSON 当我从php获取数据时,dosnt显示,当警报数据我看到Object

我的问题在哪里?

PHP

if(isset($_SERVER["HTTP_X_REQUESTED_WITH"])){

    $query = mysql_query("select * from tab");

    for ($i=0;$i<mysql_num_rows($query);$i++){

         while($row = mysql_fetch_assoc($query)){
             $title['t'][i] = $row['title'];
             $title['d'][i] = $row['description'];
         }
    }

echo(json_encode($title));
exit();

?>

JS

$('#button').click(function(){
    $.ajax({
        url : "test2.php",
        data : $("#tab"),
        type : "GET",
        success : function(b){
                      b = eval('('+ b +')');    
                      console.log((b['t']));
                      alert(b);
                  }
    });
});

如何从此JSON获取所有数据并向我展示其核心?

2 个答案:

答案 0 :(得分:7)

这是一个完整的工作示例,包含单行提取和多行提取,不使用mysql_语法并使用预准备语句来阻止sql注入。

是的,不要使用mysql特定的语法,就像我在这里提到的那样:I cant get the form data to go into database. What am I doing wrong?

function example()
{
    var select = true;
    var url = '../scripts/ajax.php';

    $.ajax(
    {
        // Post select to url.
        type : 'post',
        url : url,
        dataType : 'json', // expected returned data format.
        data : 
        {
                'select' : select // the variable you're posting.
        },
        success : function(data)
        {
            // This happens AFTER the PHP has returned an JSON array,
            // as explained below.
            var result1, result2, message;

            for(var i = 0; i < data.length; i++)
            {
                // Parse through the JSON array which was returned.
                // A proper error handling should be added here (check if
                // everything went successful or not)

                result1 = data[i].result1;
                result2 = data[i].result2;
                message = data[i].message;
                // Do something with result and result2, or message.
                // For example:
                $('#content').html(result1);

               // Or just alert / log the data.
               alert(result1);
            }
        },
        complete : function(data)
        {
            // do something, not critical.
        }
    });
}

现在我们需要在ajax.php中收到发布的变量:

$select = isset($_POST['select']) ? $_POST['select'] : false;

三元运算符如果未设置,则$ select的值将变为false。

确保您可以访问您的数据库:

$db = $GLOBALS['db']; // An example of a PDO database connection

现在,检查是否请求$ select(true),然后执行一些数据库请求,并使用JSON返回它们:

if($select)
{
    // Fetch data from the database.
    // Return the data with a JSON array (see below).
}
else
{
    $json[] = array
    (
        'message' => 'Not Requested'
    );
}
echo json_encode($json);
flush();

如何从数据库中获取数据当然是可选的,您可以使用JSON从数据库中获取单行,也可以使用它返回多行。

让我举个例子说明如何使用json返回多行(您将在javascript(数据)中迭代):

function selectMultipleRows($db, $query)
{
    $array = array();
    $stmt = $db->prepare($query);
    $stmt->execute();
    if($result = $stmt->fetchAll(PDO::FETCH_ASSOC))
    {
        foreach($result as $res)
        {
            foreach($res as $key=>$val)
            {
                $temp[$key] = utf8_encode($val);
            }
            array_push($array, $temp);
        }
        return $array;
    }
    return false;
}

然后你可以这样做:

if($select)
{
    $array = array();
    $i = 0;

    $query = 'SELECT e.result1, e.result2 FROM exampleTable e ORDER BY e.id ASC;';
    foreach(selectMultipleRows($db, $query) as $row)
    {
        $array[$i]["result1"] = $row['result1'];
        $array[$i]["result2"] = $row['result2'];
        $i++;
    }

    if(!(empty($array))) // If something was fetched
    {
        while(list($key, $value) = each($array))
        {
             $json[] = array
             (
                 'result1' => $value["result1"],
                 'result2' => $value["result2"],
                 'message' => 'success'
             );
       }
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

或者,如果你想KISS(保持简单愚蠢):

初始化一个基本函数,从数据库中选择一些值并返回一行:

function getSingleRow($db, $query)
{
    $stmt = $db->prepare($query);
    $stmt->execute();
    // $stmt->execute(array(":id"=>$someValue)); another approach to execute.
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if($result)
    {
        $array = (
            'result1' => $result['result1'], 
            'result2' => $result['result2']
        );
        // An array is not needed for a single value.
        return $array;
    }
    return false;
}

然后获取行(或单个值)并使用JSON返回它:

if($select)
{
    // Assume that the previously defined query exists.
    $results = getSingleRow($db, $query);
    if($results !== false)
    {
         $json[] = array
         (
             'result1' => $results['result1'],
             'result2' => $results['result2'],
             'message' => 'success'
         );
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

如果你想获得$(&#34;#tab&#34;)的价值,那么你必须做一些像$(&#34;#tab&#34;)。val()或$( &#34;#标签&#34;)文本()

我希望有所帮助。

答案 1 :(得分:0)

我建议使用:

b = jQuery.parseJSON(data)

查看更多here      或

$.getJSON

而不是eval()