我想在不重新加载页面的情况下运行 MySQL 查询。我认为 JavaScript 可以做到这一点,但我不确定如何。我想要做的是有一个带有返回 id 字段的表格,当你用返回 id 填写一次表格并稍后返回并使用该返回 id 时,它会为他们填写很多内容以节省时间.
问问题
62620 次
6 回答
7
您无法使用纯 JavaScript 进行查询。它必须通过在后端设置的钩子来完成。
这往往是用 ajax 来完成的。
此外,如果可以从客户端进行查询,那么每个人都可以看到您的连接字符串。
于 2012-06-27T00:37:43.350 回答
3
您需要有一个后端脚本来执行查询 - JavaScript,作为一种完全客户端语言,对您的 MySQL 服务器发生的事情没有发言权。
您需要做的是通过 AJAX 将查询中所需的参数传递给您使用的任何服务器端语言,并让脚本根据需要创建和处理查询。
不要在 javascript 中创建查询并将其传递给服务器 - 这是非常不安全的,因为它允许任何人运行他们想要的任何查询。
于 2012-06-27T00:37:54.887 回答
3
使用 ajax 就可以完成这项工作。但是您仍然需要一种服务器端语言来调用 ajax。将 jquery 与 ajax 一起使用会更快!
$.ajax({
type: "POST",
url: "someserversidelangfile",
data: "" //pass data through this variable
}).done(function( msg ) {
//do so
});
于 2012-06-27T00:39:36.243 回答
1
每个人都在关注ajax
,所以这里有一个关于如何使用 vanilla JavaScript 发送数据并取回响应的示例。这将是一个无意义的示例,将使用非 PDO MySQL 连接。后端是 PHP,但 script.js 文件实际上与 NODE.js 后端相同。
脚本.js
/* mode options are cors, no-cors (only send, no response) and same-origin */
fetch('not-ajax.php', {
method: 'post',
mode: 'same-origin',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json', // sent request
'Accept': 'application/json' // expected data sent back
},
body: JSON.stringify({
/**
* FYI: For this particular case you would actually prefer to have this snippet
* just before ending </body> tag so it get's actual width of the window minus
* the width of the scrollbar if there is one. If you use it in an external
* script it's the same as using window.innerWidth and window.innerHeight.
**/
'screen_width': document.documentElement.clientWidth,
'screen_height': document.documentElement.clientHeight
})
})
/**
* You need this part as well if you send json-encoded data back from backend.
**/
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
非ajax.php
<?php
include 'connection.php';
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if ($contentType === "application/json") {
// Receive the RAW post data.
$content = trim(file_get_contents("php://input"));
// $decoded can be used the same as you would use $_POST with ajax
$decoded = json_decode($content, true);
/**
* Sure enough you can use a SELECT statement, get the data from the database,
* manipulate it to your heart's content, and then send it back to fetch
* function in JavaScript for further manipulation and usage.
**/
$sql =
"INSERT INTO used_screen_dimensions (
) VALUES ( ?, ? )";
$statement = $connection->prepare($sql);
/**
* first parameter is a string with characters
* 'i' for integer,
* 'd' for double,
* 's' for string,
* 'b' for blob
* in the respective order to all other binded parameters
**/
$statement->bind_param('ii', $decoded['screen_width'], $decoded['screen_height']);
$result = $statement->get_result();
$statement->close();
/**
* You may only echo out one thing, but it doesn't have to be a boolean.
* You can (and should) echo an object with more info including what error
* it is.
**/
if(! is_array($decoded)) {
echo 0; //If json_decode failed, the JSON is invalid.
return;
} else {
// Send error back to fetch.
if (!$result) {
echo 0; // couldn't insert to database
return;
}
echo 1; // Success
}
} else {
echo 0; // Wrong content type
}
不知道为什么我去手写这个答案。难免有错误。
于 2020-07-21T13:43:46.777 回答
-1
JavaScript 无法运行 MySql 命令。您可以将 JQuery 与 Ajax 一起使用。像这样 :
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
于 2021-08-31T06:40:08.850 回答