#javascript #node.js #reactjs
#javascript #node.js #reactjs
Вопрос:
Я хочу отправить данные формы на совершенно новый URL-адрес нажатием кнопки отправки. Это в приложении React. У меня есть базовая настройка формы следующим образом.
let form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action",'localhost:3000/message/');
form.setAttribute("onSubmit", this.handleSubmit);
form.setAttribute("target", 'newWindow');
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "message");
hiddenField.setAttribute("value", "Hi. Im Awesome");
form.appendChild(hiddenField);
document.body.appendChild(form);
window.open('localhost:3000/message/', 'newWindow');
form.submit();
handleSubmit(e) {
e.preventDefault();
}
На этом этапе, когда я отправляю, открывается новая вкладка localhost:3000/message
, но на этой вкладке также выполняется сетевой запрос localhost:3000/message/
с данными формы.
Я хочу остановить дополнительный сетевой вызов localhost:3000/message/
, и я также хочу иметь доступ к данным формы непосредственно в приложении, работающем на 3000.
Достижимо ли это?
ОБНОВЛЕНИЕ: как упоминал @Jite, выборка устранит некоторые проблемы, поэтому вместо прямой отправки данных в виде формы я также попытался отправить их через fetch api.
window.open('localhost:3000/message/', 'newWindow');
fetch('localhost:3000/message/', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
message: 'Hi, I'm even more awesome!'
})
})
Метод визуализации приложения, запущенного в localhost:3000
, настраивается следующим образом-
//import { BrowserRouter as Router, Route } from "react-router-dom";
render() {
return (
<Router>
<Route
path="/message"
render={props =>
<h2>Any message for me ?</h2>
}
/>
</Router>
);
}
Я все еще не понимаю, как получить доступ к сообщению, отправляемому на этот URL.
Комментарии:
1. Не могли бы вы сделать это с помощью вызова выборки на первой «вкладке»? Если вы откроете новую вкладку, это, по сути, новый процесс, и для выполнения того, что вы просите, потребуется немало неприятного кодирования! Я думаю, что было бы неплохо, если бы вы написали, чего вы хотите достичь, потому что я думаю, что то, что вы собираетесь сделать, можно было бы сделать лучше 🙂
2. Да, это действительно кажется глупым способом делать вещи 🙂 Ну, по сути, у меня есть 2 веб-приложения, и мне нужно открыть второе веб-приложение (новая вкладка) из первого, а также отправить некоторые данные. Выборка кажется хорошим способом сделать что-то, но я все еще не уверен, как я буду получать доступ к данным, отправляемым на вторую вкладку. Я обновлю вопрос, чтобы также включить опцию выборки.
Ответ №1:
На данный момент мне удалось решить проблему, отправив данные с window.postMessage()
помощью и получив к ним доступ в новом окне, прослушав message
событие.