简体   繁体   English

使用Ajax访问stdClass对象

[英]Access stdClass Object using Ajax

I'm sending an Ajax request to the database to retrieve all data from a particular MySQL table. 我正在向数据库发送Ajax请求,以从特定的MySQL表检索所有数据。 I'm getting the result successfully. 我成功获得结果。 However, the result I'm getting is the stdClass object. 但是,我得到的结果是stdClass对象。 Now I'm confused how to access them using jQuery to output them into my page. 现在,我很困惑如何使用jQuery访问它们以将它们输出到我的页面中。

// fetch.php

// Display particular SMS by sid
$result = $database->get_by_sid($_POST['sid']);

// Rendering the result to Ajax
foreach ( $result as $message ) {
    print_r($message);
}

// main.js
$.ajax({
    url: '/admin/fetch.php',
    data: 'sid=' + sid,
    method: 'POST',
    beforeSend: function () {
        $('.progress').show();
    },
    complete: function () {
        $('.progress').hide();
    },
    success: function (data) {
        console.log(data);
    },
    error: function () {
        Materialize.toast('Cannot send the request. Please try again later or refresh the page', 4000);
    }
return falsel
});

And I'm getting the result like the following PHP stdClass object format: 我得到的结果类似于以下PHP stdClass对象格式:

// console
stdClass Object
(
    [id] => 1
    [user_name] => admin
    [phone_number] => +16469267421
    [from] => +16469267421
    [body] => Hi Ngrok
    [sid] => SM1fe8a7a5a65261a7ebc765e020b1d89a
    [time] => 2015-09-03 06:18:13
    [status] => received
)
stdClass Object
(
    [id] => 2
    [user_name] => admin
    [phone_number] => +16469267421
    [from] => +16469267421
    [body] => Okay. so the request is perfect :)
    [sid] => SM4b4d9fc928e12e3ddbf63df6204fb4cd
    [time] => 2015-09-03 06:20:19
    [status] => received
)
stdClass Object
(
    [id] => 3
    [user_name] => admin
    [phone_number] => +16469267421
    [from] => +16469267421
    [body] => Wow, I'm really happy to see this now :)
    [sid] => SM4704dff6517c02e284cbfe812730917c
    [time] => 2015-09-03 06:21:06
    [status] => received
)
stdClass Object
(
    [id] => 4
    [user_name] => admin
    [phone_number] => +16469267421
    [from] => +16469267421
    [body] => I hope everything is now working correctly as expected.
    [sid] => SM6577ca7e346551486d2572acfe99aec0
    [time] => 2015-09-03 06:32:22
    [status] => received
)
stdClass Object
(
    [id] => 5
    [user_name] => admin
    [phone_number] => +16469267421
    [from] => +16469267421
    [body] => Hi, Good morning :)
    [sid] => SM7f3d9adbfd1274c58efaaeb9a3aca013
    [time] => 2015-09-03 07:02:30
    [status] => received
)

So, I wish to know how you can actually access the result as an Javascipt object to output like: data.body 因此,我想知道您如何实际上可以作为Javascipt对象访问结果以输出如下数据: data.body

You can fetch object first and the make an array 您可以先获取对象,然后创建一个数组

while($row= mysqli_fetch_row($result))
{
   $arr[]= $row;
}
echo json_encode($arr);
exit;

It will give response in json. 它将在json中给出响应。 if you want to get responsne in array format you do this. 如果要以数组格式获取响应,请执行此操作。

  print_r($arr);
  exit;

First, build an array of your results on the server side: 首先,在服务器端构建一组结果:

$output = [];
foreach ($result as $message) {
    $output[] = $message;
}

Then when you're ready to send it back to javascript, set the content type: application/json header and print a json-encoded version of the array: 然后,当您准备将其发送回javascript时,设置内容类型:application / json标头并打印数组的json编码版本:

header('Content-Type: application/json');
echo json_encode($output);
exit;

You will have to send your data from your php server to client as JSON 您将必须将数据从php服务器作为JSON发送到客户端

header('Content-Type: application/json');
$result = $database->get_by_sid($_POST['sid']);

// Rendering the result to Ajax
$data = [];
foreach ( $result as $message ) {
    $data[] = $message;
}
echo json_encode($data);
exit;

// main.js
$.ajax({
    url: '/admin/fetch.php',
    data: 'sid=' + sid,
    method: 'POST',
    beforeSend: function () {
        $('.progress').show();
    },
    complete: function () {
        $('.progress').hide();
    },
    success: function (data) {
        $.each ( data, function ( i, v ) {
            //v.id id
            //v.user_name user_name
            //v.phone_number phone_number
        });
    },
    error: function () {
        Materialize.toast('Cannot send the request. Please try again later or refresh the page', 4000);
    }
});

Also remove return falsel line from main.js 同时从main.js删除return falsel

How are you getting the data form the DB? 您如何从数据库获取数据? If you get them as assoc Array you can use json_encode. 如果将它们作为assoc Array获得,则可以使用json_encode。

In your fetch.php (instead of foreach): 在您的fetch.php中(而不是foreach中):

echo json_encode($result);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM