У меня есть веб-сайт, взаимодействующий с моим термостатом Nest.Я пытаюсь, чтобы кнопки «вверх» и «вниз» в HTML вызывали функцию, которая измеряет целевую температуру термостата, увеличивает или уменьшает ее на один градус, настраивает термостат и затем отображает вновь установленную температуру термостата.
Я могу заставить его работать (без AJAX), но это не красиво и добавляет теги «tempUp / Dn = 1» к URL моих сайтов, что приводит к путанице.Ниже показана текущая настройка.Как я могу использовать AJAX с этой настройкой, чтобы я мог просматривать index.php и увеличивать / уменьшать температуру, не выходя из index.php?
Я предполагаю, что мне нужно что-то вроде этого, но я не делаюзнать, где его разместить:
$.ajax({
type: "POST",
url: "something.php",
success: function(msg){
alert( 'something' );
}
});
index.php:
Главный портал для моего сайта.Делает много вещей.Только часть, где находится, приносит в мой плагин термостата
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
// Load at thermostat
$.ajax({
url: "./thermostat/thermostat.php",
type: "POST",
dataType: "text",
success: function(data){
$("#thermostat_div").html(data);
}
})
});
</script>
<div id=thermostat_div>
Loading the thermostat...
</div>
thermostat.php:
Показывает целевую температуру от термостата.Также отображаются кнопки «вверх» и «вниз», предназначенные для увеличения или уменьшения температуры.
Если я загружаю эту страницу непосредственно в браузере, она работает.Это работает путем добавления «& tempUp = 1» или «& tempDn = 1» URL-адреса и перезагрузки страницы.Но когда я загружаю свой основной index.php, кнопки срабатывают при нажатии, но температура не обновляется.Мне нужно что-то, чтобы я мог загрузить index.php, щелкнуть по кнопкам, запустить соответствующую функцию увеличения / уменьшения, а затем каким-то образом обновить thermometer_div, чтобы показать новую установленную температуру без добавления дерьма в URL.
<?php
// Import the function to adjust the target temp
include '/var/www/thermostat/functions.php
// Display the temp the thermostat stat is set to
echo "<div class='targetTemp'>".$targetTemp."</div>";
if($_GET['tempDn']){
$targetTemp = $targetTemp - 1;
$newTemp = '{"target_temperature_f": ' . $targetTemp . '}';
changeTemp($newTemp);
}
if($_GET['tempUp']){
$targetTemp = $targetTemp + 1;
$newTemp = '{"target_temperature_f": ' . $targetTemp . '}';
changeTemp($newTemp);
}
?>
<button class="btndn orange" type="button" onClick='location.href="?tempDn=1"'>ᐁ</button>
<button class="btnup orange" type="button" onClick='location.href="?tempUp=1"'>ᐃ</button>
functions.php:
<?php
function changeTemp($changeTempTo) {
include '/var/www/config.php';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://developer-api.nest.com/devices/thermostats/secretcode",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => $changeTempTo,
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$nestAccessToken,
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded",
"content-length: ".strlen($changeTempTo)
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
}
}
//Get all the other status off the thermostat
include '/var/www/config.php';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://developer-api.nest.com/devices/thermostats/secretkey",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => "client_id=".$nestClientID."&client_secret=".$nestClientSecret."&grant_type=authorization_code&code=".$nestAuthCode,
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$nestAccessToken,
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$parsed_json = json_decode($response);
$targetTemp = $parsed_json->{'target_temperature_f'};
}
?>