![](/img/trans.png)
[英]How can I display search results on the same page as the search form element?
[英]How can I display user search results onto the same page inside a table?
我正在嘗試獲取一些用戶搜索結果數據,以將其打印到進行搜索的同一頁上的表格中。 我在這里搜索了解決方案,但是所有示例都使用MySql。 我目前只是從項目中的單個.log文件中搜索。 我使用AJAX調用從單擊按鈕開始搜索。 我可以看到搜索輸入確實從.log文件返回了匹配項。
我對PHP相當陌生(2周!),並且希望獲得有關如何實現此目標的任何建議。
錯誤lookup.php
<?php
require_once $RootPath . "p/check-session.inc";
$RootPath = "";
$User = "";
$RetCode = 200;
$sProcess = "error-lookup.php";
?>
<!doctype html>
<html lang="en">
<head>
<title>MyTools</title>
<?php include_once ($RootPath."p/html-head.inc"); ?>
</head>
<script>
function verifyAccount() {
var pageData = {};
errorData = $('#userInput').val();
pageData['errorData'] = errorData;
var param = JSON.stringify(pageData);
$.ajax({
global: false,
"url": "p/search-log.php",
data: pageData,
cache: false,
"type": "POST",
dataType: "json",
"complete": function (selectionData) {
console.log(selectionData);
try {
var resultData = $.parseJSON(selectionData.responseText);
var output = "";
for (var i = 0; i < resultData.length; i++) {
var output = "<td>" + resultData[i].Id + "</td><br>" + "<td>" + resultData[i].Date + "</td><br>" + "<td>" + resultData[i].User + "</td><br>" + "<td>" + resultData[i].Message + "</td><br>" + "<td>" + resultData[i].StackTrace + "</td>";
$("dataTable").append(output);
}
document.write(output);
$("dataTable").html(resultData);
} catch (err) {
showError(1,err);
}
}
});
}
</script>
<body>
<div class="page-header">
<div class="container">
<div class="row-fluid">
<medium>Platform error code lookup</medium>
</div>
</div>
</div>
<form class="container">
<input type="radio" name="tags[]" value="East-Coast" class="east-radio"/>
<label >East Coast Servers</label><br/>
<input type="radio" name="tags[]" value="West-Coast" class="west-radio"/>
<label >West Coast Servers</label>
</form><br>
<div class="input-group mb-3">
<form class="container" action="search-log.php" method="post">
<input class="form-control" id="userInput" type="text" name="input_tag" placeholder="Enter error code or user name">
<div class="input-group-append">
<input class="btn btn-outline-secondary" value="Submit" name="submit_button" type="button" onclick="verifyAccount()"></input>
</div>
</form>
<table class="table" id="dataTable">
<tbody>
<tr>
<th>Date</th>
<th>Error Id</th>
<th>User</th>
<th>Message</th>
<th>StackTrace</th>
</tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tbody>
</table>
<div class="container">
<div id="test"></div>
</div>
</body>
</html>
搜索日志
<?php
$errorData = $_REQUEST["errorData"];
$errors = [];
$lines = file("../MyWeb.log", FILE_IGNORE_NEW_LINES);
foreach($lines as $line) {
$tmp = [];
$tmp["Date"] = substr($line, 0, 19);
$pos = strpos($line, '{');
$jsonObject = json_decode(substr($line, $pos),true);
$tmp["Id"] = $jsonObject["Id"];
$tmp["User"] = $jsonObject["User"];
$tmp["Message"] = $jsonObject["Message"];
$tmp["ServerName"] = $jsonObject["ServerName"];
$tmp["StackTrace"] = $jsonObject["StackTrace"];
array_push($errors, $tmp);
}
$results=[];
foreach($errors as $error){
if (strpos($error["Date"], $errorData) > -1) {
array_push($results, $error);
continue;
}
if (strpos($error["Id"], $errorData) > -1) {
array_push($results, $error);
continue;
}
if (strpos($error["User"], $errorData) > -1) {
array_push($results, $error);
continue;
}
if (strpos($error["Message"], $errorData) > -1) {
array_push($results, $error);
continue;
}
if (strpos($error["ServerName"], $errorData) > -1) {
array_push($results ,$error);
continue;
}
if (strpos($error["StackTrace"], $errorData) > -1) {
array_push($results, $error);
continue;
}
}
print_r($results);
解析之前,請檢查您是否以有效格式獲取json。
$.ajax({
global: false,
"url": "p/search-log.php",
data: pageData,
cache: false,
"type": "POST",
"complete": function (selectionData) {
// check if you are getting valid JSON before parsing it
console.log(selectionData)
try {
var resultData = $.parseJSON(selectionData.responseText);
$("#test").html(resultData);
} catch (err) {
showError(1,err);
}
}
});
以json格式發送數據
// send json from your php script
echo json_encode($results);
注意:您可以使用右鍵單擊->檢查->網絡選項卡來檢查您的服務器正在返回什么以及是否正在進行ajax調用。
希望能幫助到你!
流程如下:
-> $ .ajax發送帶有參數的帖子;
->您像其他任何帖子一樣在您的PHP腳本中收到,不需要json解碼;
->選擇行或想要執行的任何操作,創建一個數組或對象結構,然后使用json_encode和Content-Type返回它:application / json;
->在成功函數中,只要dataType被定義為Json,響應將成為JS對象;
好。 首先,要轉換為JSON,您需要創建一個數組或對象,然后使用json_encode返回它。 它將轉換為jQuery將正確解析的JSON有效字符串。 假設您的結構如下:array('name'=>'my_name'); 當您對其進行JSON編碼時,它將變成JSON字符串,例如{“ name”:“ my_name”}
在我們的完成或成功函數中,您將具有responseText.name,其中值將為“ my_name”。 現在,您可以執行任何操作,例如使用div創建domNode並將其插入。
例如:您可以創建一個具有ID的表,然后:
$('#id-of-my-table').append('<tr><td>' + rensponseText.name + '</td></tr>');
當然,這只是一個原始示例,只是為了說明一個非常簡單的用法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.