当前位置: 首页 > 知识库问答 >
问题:

如何使用Javascript从服务器获取特定的JSON数据?

诸葛卜霸
2023-03-14

我有一个创建的sqlite服务器,它保存关于用户的JSON数据。数据看起来像这样:

{
0:{
    id: 1,
    name:   "Sam Smith",
  },
1:{
    id: 2,
    name:   "Jane Smith",
  }
}

我也有一个基本的html页面的形式:

<div id="input" class="searchuser">
        <form>
            <legend class="useradd-fonts">Search Existing User</legend>


            <label for="search_byname">Name: <input type="text" id="search_byname"/></label>
            <input type="button" id="get-btn" value="Search" /><br>
        </form>
</div>

我也有使用XMLhttprequest()从服务器获取此数据的代码,但是,该代码只允许获取整个JSON数据并显示所有用户:

const getBtn = document.getElementById("get-btn");

const getData = function() {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "http://127.0.0.1:3000/users");

    xhr.onload = function() {
        const data = JSON.parse(xhr.response);
        console.log(data);
    };
    xhr.send();

};

getBtn.addEventListener("click", getData);

我的问题是,如何按用户名搜索用户,因此在HTML表单中,编写Sam Smith,单击按钮后,将只返回第一个用户的信息,而不是数据集中的所有用户?我想在不使用任何外部库的情况下使用XMLhttprequests实现这一点,这可以做到吗?

共有3个答案

井斌斌
2023-03-14

这可以通过两种方式完成,您可以在将数据提供给web页面之前过滤数据(服务器逻辑),或者您可以在JSON数组中的第一个对象到达web页面时使用它,您可能希望在获取第一个数据集之前对数据集进行排序。

如果您在查询中获取所有用户的信息(xhr.open(GET,http://127.0.0.1:3000/users)),并且您试图在前端过滤它,那么您的xhr.onload应该是这样的。

xhr.onload = () => {
        const jsonArray = JSON.parse(xhr.response);
        const user = Object.keys(jsonArray).map(key => jsonArray[key]).filter(e => e.name == document.getElementById("search_byname").value)[0];
        console.log(user );
    };

如果您的JSON数组已经被过滤(如果您按名称查询数据库过滤),那么它应该被过滤

xhr.onload = () => {
        const user = JSON.parse(xhr.response)[0];
        console.log(user);
    };
太叔京
2023-03-14

您需要首先在后端指定搜索服务。例如,您可以检查是否有名为searchGET参数,然后根据给定的参数值筛选用户。

PHP

<?php

$search = @$_GET['search'];
$query = 'SELECT * FROM users';

if (strlen($search) > 0) 
  $query .= " WHERE name LIKE '%$search%'");
}

// Then execute $query and print data as json

?>

Express.js

app.get('/users', (req, res) => {
  let search = req.query.search;
  let query = 'SELECT * FROM users' + (
    search && search.length ? ` WHERE name LIKE '%${search}%'` : '';
  );

  // execute [query] and send response
});

以上代码仅用于示例目的,请勿在生产中使用,否则可能导致SQL注入。

用该代码更改您的js:

const getBtn = document.getElementById("get-btn");
const searchByNameInput = document.getElementById("search_byname");

const getData = function() {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "http://127.0.0.1:3000/users?search=" + encodeURIComponent(searchByNameInput.value));

    xhr.onload = function() {
        const data = JSON.parse(xhr.response);
        console.log(data);
    };
    xhr.send();

};

getBtn.addEventListener("click", getData);

在这段代码中,我们使用查询字符串为服务器提供额外的参数来过滤我们的请求。要指定查询字符串,需要在url后面添加(问号),并指定由分隔的参数

https://website.tld/link/to/page?param1=value1&param2=value2&...&paramN=valueN

在后端,您可以使用您的语言或框架的功能轻松获取给定的参数,然后使用sqlWHERE子句过滤结果。

下面是用不同语言/框架获取查询字符串参数的其他代码示例。

  • Node.js

冯敏达
2023-03-14

我已经弄明白了,服务器有一个单独的javascript文件来执行GET请求。因此,与此相反:


    xhr.open("GET", "http://127.0.0.1:3000/users");


我应该这样写:

xhr.open("GET", "http://127.0.0.1:3000/search?type=user&name=" + input);
 类似资料:
  • 问题内容: 我有一个应用程序,我想在其中从php Web服务器获取json数据到android mobile。我所拥有的是一个URL,点击该URL将为我提供json数据,例如 。但我想在我的android手机中检索此json格式,并从json格式获取经度和纬度值。 我们如何在android mobile上获得它呢? 提前致谢.. 问题答案: 首先做URL连接 JSON字串 在下面,我正在获取国家/

  • 我有一个从数据库中提取数据的表。在同一张桌子里,我有两个按钮。通过按任意一个按钮,我希望获得所有特定的列数据。我试过几种方法。请参阅下面的代码。 生成上表HTML和PHP: JavaScript:每个警报都是我尝试的不同方法,但没有成功

  • Im编写了一个小的Android应用程序,它应该从npm JSON服务器获取数据。它会抛出一个异常。我确实使用AsyncTask扩展了connection类,并在“DoInBackground”中执行了代码,但它仍然抛出了一个异常。请帮帮我. 代码如下: logcat告诉我们:

  • 我有一个这样的回应json, 我想显示userId=3的详细信息,但没有为我提供获取详细信息的endpoint。所以我想从这个endpoint得到细节。 应用程序内: 我已经显示了仪表板的数据(使用recyclerview/list)

  • 如图所示: 我有一个对象数组,我想是JSON数组。我只想在这个数组上获取“productThumbnailUrl”,并以另一种方式使用它。 有人能帮我得到这个值并将其存储在一个单独的变量中吗? 它在数组中有多行。我只想得到“productThumbnailUrl”。

  • 我不知道如何选择特定的JSON数据。 如何更改此代码以使我只有id,而没有其他响应数据? 我在网上阅读,显然我需要使用结构?我不确定如何处理这个问题。 这将返回...