我有一个创建的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实现这一点,这可以做到吗?
这可以通过两种方式完成,您可以在将数据提供给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);
};
您需要首先在后端指定搜索服务。例如,您可以检查是否有名为search
的GET
参数,然后根据给定的参数值筛选用户。
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¶m2=value2&...¶mN=valueN
在后端,您可以使用您的语言或框架的功能轻松获取给定的参数,然后使用sql
WHERE
子句过滤结果。
下面是用不同语言/框架获取查询字符串参数的其他代码示例。
Node.js
我已经弄明白了,服务器有一个单独的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,而没有其他响应数据? 我在网上阅读,显然我需要使用结构?我不确定如何处理这个问题。 这将返回...