Как вывести строку из Rust в HTML элемент с помощью JS?
Делаю приложение на Rust Tauri при первом запуске нужно чтобы выводились сообщение на подобии "Привет, {имя учетки пк юзера}" имя я могу получить но вывести это в HTML элемент не могу, облазил всю документацию и стек оферфлоу вдоль и поперек ничего не нашел, можете дать код и объяснить его.
P.S: я чайник в rust и особенно в Tauri. Я пробовал много способов и ошибок не было но и результата таже не было
Дополнительно:
Показывай свой код, в котором не получается
Ответы:
Для того чтобы вывести строку из Rust в HTML элемент с помощью JS, можно использовать JavaScript API, предоставляемый Tauri. Вот пример кода:
Rust:
#[tauri::command] fn get_username() -> String { let username = whoami::username(); format!("Привет, {}!", username) } |
#[tauri::command] fn get_username() -> String { let username = whoami::username(); format!("Привет, {}!", username) }
JavaScript:
async function getUsername() { const response = await window.tauri.promisified({ cmd: 'get_username' }); const username = response.result; const element = document.getElementById('greeting'); element.innerHTML = username; } |
async function getUsername() { const response = await window.tauri.promisified({ cmd: 'get_username' }); const username = response.result; const element = document.getElementById('greeting'); element.innerHTML = username; }
В этом примере мы создаем функцию getUsername, которая вызывает Rust функцию get_username с помощью Tauri API и получает строку с приветствием. Затем мы находим элемент HTML с идентификатором greeting и устанавливаем его содержимое равным полученной строке.
Для того чтобы вызвать функцию getUsername, можно использовать обработчик события DOMContentLoaded:
document.addEventListener('DOMContentLoaded', getUsername); |
document.addEventListener('DOMContentLoaded', getUsername);
Этот код вызовет функцию getUsername при загрузке страницы.
Обратите внимание, что для использования Tauri API необходимо добавить соответствующие зависимости в Cargo.toml и настроить конфигурацию проекта. Более подробную информацию можно найти в документации Tauri.
- ChatGPT?
- Василий Банников, Нет)
- Загир Меджидов, сам такую манеру ответов перенял? Или просто другая lm-ка?
- Василий Банников, пытаюсь быть грамотнвм
- Загир Меджидов, и сразу ошибка
- Василий Банников, про ChatGPT поделюсь, как раз таки пишу прогу где будет неограниченое число запросов для ChatGPT там будут добровольные пожертвования на развитие проекта, сделаю что то такое же для Android, по поводу айос не скажу точно. Я практикуюсь с Rust и Tauri и хочу помочь школьникам и студентам, знаю что они там списывают, а вообще код на получения юзернейма учетки я взял с ChatGPT мой метод тут не подходил и я решил не париться.
P.S извеняюсь за долгий и длинный комент, само напрашивалось расскать :)
- Загир Меджидов, Я сейчас подключу все зависимости и попробуй ваш код, у меня точь в точь такой же код на Rust знал что проблема в JS а не в нем т.к в компиляторе ошибок не было, спасибо сейчас проверю
- Загир Меджидов, и кстасти можно было бы реализовать с помощью .onload мне так привычнее, не знаю кому как
- Неа, все не очень хорошо такая ошибка:
expected `String`, found `()` может попробовать Result<String, String> попозже проверю - я исправил ошибку из-за которой возникал ошибка с типом но теперь нету опять ошибок и результата
- Mercury Effirium, ошибка expected `String`, found `()`, говорит, что он ожидал String, а получил array. Попробуйте использовать мой код и вывести в консоль переменную username. Код:
JavaScript
async function getUsername() { const response = await window.tauri.promisified({ cmd: 'get_username' }); const username = response.result; console.log(username); # Проверим содержимое username. const element = document.getElementById('greeting'); element.innerHTML = username; }
async function getUsername() { const response = await window.tauri.promisified({ cmd: 'get_username' }); const username = response.result; console.log(username); # Проверим содержимое username. const element = document.getElementById('greeting'); element.innerHTML = username; }
- Загир Меджидов, вот такая ошибка
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'promisified') at getUsername (app.js:23:41)
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'promisified') at getUsername (app.js:23:41)
я так понимаю проблема в API
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы вывести строку из Rust в HTML элемент с помощью JS, вам потребуется использовать веб-сервер на стороне Rust, который будет обрабатывать запросы и возвращать данные в формате JSON, а затем на стороне клиента использовать JavaScript для получения этих данных и добавления их в HTML элемент.
Прежде всего, вам нужно создать веб-сервер на Rust, который будет отвечать на запросы и возвращать данные. Ниже приведен пример кода на Rust, который создает простой веб-сервер с использованием библиотеки `actix-web`:
use actix_web::{web, App, HttpServer, Responder, HttpRequest, HttpResponse}; async fn index(req: HttpRequest) -> impl Responder { HttpResponse::Ok().body("Hello, Rust!") } #[actix_web::main] async fn main() -> std::io::Result { HttpServer::new(|| { App::new() .route("/", web::get().to(index)) }) .bind("127.0.0.1:8080")? .run() .await }
Затем вам нужно написать скрипт на JavaScript, который будет отправлять запрос на сервер, получать данные и добавлять их в HTML элемент. Ниже приведен пример кода на JavaScript, который делает это с использованием `fetch`:
fetch('http://127.0.0.1:8080') .then(response => response.text()) .then(data => { document.getElementById('output').innerText = data; });
Наконец, вам нужно создать HTML файл, в котором будет элемент, в который будет помещен текст из Rust. Ниже приведен пример кода HTML:
<title>Rust to HTML</title> <div id="output"></div><title>Rust to HTML</title> <div id="output"></div>
После запуска веб-сервера на Rust и открытия HTML файла в браузере, вы увидите текст "Hello, Rust!" на странице, который был получен из веб-сервера и добавлен в HTML элемент с помощью JavaScript.