В настоящее время я разрабатываю приложение для интрасети для своей компании. В моем приложении я хотел бы получить некоторые переменные с javascript и отправить их в базу данных MySql через php.
Я знаю, что javascript - это клиентская сторона, а php - серверная, поэтому я не уверен, возможно ли передавать эти переменные.
Цель состоит в том, чтобы получить имя компьютера текущего пользователя и сохранить его в базе данных SQL всякий раз, когда они открывают сайт интрасети.
<?php
<script type="javascript">
var network = new ActiveXObject('WScript.network');
<?php $pcName = "<script>document.write(network.computername)</script>";
</script>
?>
Эта часть работает отлично. $pcName
хранится в переменной php переменной $pcName
и при попытке эхо-изменения переменной она отображается на узле интрасети.
$sql = "INSERT INTO t1 (pcName) VALUES ('".$pcName."')";
Но когда я вставляю его в свою таблицу sql, это значение "<script>document.write(network.computername)</script>"
. Я что-то пропустил? Или это так, как я предполагал, что переменная доступна на клине, а клиент только.
Вам, вероятно, придется создавать и вызывать "API". Например, на клиенте у вас может быть что-то вроде этого:
<script type="javascript">
var network = new ActiveXObject('WScript.network');
var pcName = network.computername;
fetch('storeComputer.php', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
pcName: pcName
})
});
</script>
А затем на стороне PHP:
// storeComputer.php
$json = json_decode(file_get_contents('php://input'));
$pcName = $json['pcName'];
// do what you want with $pcName..
Да, это возможно.
Javascript может запускать любой URL с параметрами, в частности включая JSON-кодированные параметры; URL-адрес может запускать CGI-скрипт; скрипт CGI может поймать JSON и взаимодействовать с MySQl; а затем вернуть результат в javascript либо асинхронно, либо синхронно. Здесь запускается асинхронный URL-адрес:
// this is asynchronous - result comes back to callback later, while this returns immediately
// -----------------------------------------------------------------------=======------------
function callAjax(url, callback)
{
var xmlhttp;
// compatible with IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
Здесь обратный вызов:
function cb_myCallback(theStuff)
{
// process theStuff here. If it JSON data, you can unpack it trivially in Javascript,
// as I will describe later. For this example, it just text. You're going to get
// back "hello, Ben"
console.log(theStuff);
}
Итак, как я могу использовать это, чтобы вызвать скрипт, который может получить доступ к базе данных:
function pyRequest(upd_data,upd_callback)
{
var cd_url;
cd_url = '/cgi-bin/myPython.py?myData=' + encodeURIComponent(upd_data);
callAjax(cd_url,upd_callback);
}
pyRequest("Ben",cb_myCallback);
Так вот что происходит. pyRequest() создает URL-адрес, который может вызывать скрипт Python (или все, что вам нравится). callAjax() фактически выполняет вызов. Все это немедленно возвращается к вызывающему коду. Позже, когда скрипт выполнил всю свою задачу, обратный вызов в примере cb_myCallback() отправляется независимо от сценария.
Синхронный подход
Могут быть случаи, когда вы не хотите использовать асинхронный обратный вызов, потому что вы не можете продолжить, пока не получите данные, которые вы просили. В таких случаях вам нужно использовать синхронный запрос, который не будет возвращаться (с фактическим ответом), пока ответ не будет получен из сценария. Обратите внимание, что в этой функции я вставляю URL-адрес, чтобы продемонстрировать небольшое разнообразие в возможной структуризации этих типов использования:
// this is synchronous - result returns only when called script provides it
// ------------------------------------------------------------------------
function syncCallAjax(spdq_myData)
{
var remote = '__Unset__';
var request = new XMLHttpRequest();
var remote_url;
remote_url = '/cgi-bin/myPython.py?myData=' + encodeURIComponent(spdq_myData);
request.open('GET', remote_url, false); // false makes the request synchronous
request.send(null);
if (request.status === 200)
{
remote = request.responseText;
}
return(remote);
}
Есть много способов, но я использую jquery внутри javascript для отправки параметра в php. Его работы для меня очень хорошо
попробуй это
$('.add_item').click(function(){
var responsecontainer=$('#responsecontainer').val();
var ProductName=$('#ProductTable').val();
$.ajax({
url:"sample.php"
, method:"POST"
, data: {
ProductName: ProductName,
}
, success: function(result){
// do some thing here
}
})
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}
использование может использовать другой метод тоже.