내 textarea id="save"
의 값을 addEventListener
안에 저장합니다. 그런 다음 xhr
으로 서버에 보내고 동시에 Google App Engine 채널 API를 사용하여 채널을 열고 나서 onMessage
과 함께 보낸 메시지를 캡처하려고합니다.addEventListener에서 onMessage를 사용하는 방법은 무엇입니까?
반환 된 메시지를 제외한 모든 것이 작동합니다. 반환 된 메시지는 evt.data
이긴하지만 기록되지는 않습니다. 내가 뭘 잘못하고 있는지 이해하도록 도와 줄 수 있니? 내 previous question에 대한 후속 조치입니다. 감사! draevor's answer에 의해 제안
document.getElementById("save").addEventListener
(
"click",
function()
{
var userEmail = document.getElementById("getEmail").value;
var formData = new FormData();
formData.append("extension_user", userEmail);
var channel;
var socket;
var handler =
{
//I changed this to "onmessage" as draevor's answer but
//I still don't see "evt.data" logged
onMessage: function (evt)
{
//evt.data will be what the server sends in channel.send_message
console.log("evt.data received from authhandler: " + evt.data);
alert("evt.data is: " + evt.data)
}
};
var xhr = new XMLHttpRequest();
xhr.onReadyStateChange = function()
{
//this alert does not trigger
alert("xhr.onReadyStateChange")
if (xhr.readyState == 4 && xhr.status == 200)
{
token = xhr.responseText;
//this alert does not trigger
alert("token: " + token)
channel = new goog.appengine.Channel(token);
socket = channel.open(handler);
}
};
xhr.open("POST", "http://ting-1.appspot.com/authsender", true);
xhr.send(formData);
console.log("formData sent to authsender: " + formData);
}, false
)
UPDATE
업데이트 나는 onmessage
의 다른 속성을 추가했다. 왜 그가 작은 따옴표로 속성을 넣을 지 모르겠지만 나는 this question을 따랐다.
document.getElementById("save").addEventListener
(
"click",
function()
{
var userEmail = document.getElementById("getEmail").value;
var formData = new FormData();
formData.append("extension_user", userEmail);
var channel;
var socket;
var handler =
{
onopen: onOpen,
onmessage: onMessage,
onerror: onError,
onclose: onClose
};
var xhr = new XMLHttpRequest();
xhr.onReadyStateChange = function()
{
//this alert does not trigger
alert("xhr.onReadyStateChange")
if (xhr.readyState == 4 && xhr.status == 200)
{
token = xhr.responseText;
//this alert does not trigger
alert("token: " + token)
channel = new goog.appengine.Channel(token);
socket = channel.open(handler);
}
};
xhr.open("POST", "http://ting-1.appspot.com/authsender", true);
xhr.send(formData);
console.log("formData sent to authsender: " + formData);
}, false
)
onMessage =
function (evt)
{
//evt.data will be what the server sends in channel.send_message
console.log("evt.data received from authhandler: " + evt.data);
alert("evt.data is: " + evt.data)
}
onOpen =
function()
{
alert("onOpen")
}
onError =
function()
{
alert("onError")
}
onClose =
function()
{
alert("onClose")
}
답변 해 주셔서 감사합니다. 그러나 원래 그것은 onmessage이었고 여전히 작동하지 않았습니다. 나는 약간의 조사를했는데'onMessage'가되어야한다고 생각했고 그것을 바꿨습니다. 그래서 나는 그것을 'onmessage'로 되돌릴 것이다. 그 밖의 무엇을 시도 할 수 있습니까? – Zeynel
은 적어도 호출 된 함수입니까? 내 말은, 경고가 발동 되었습니까? 그렇지 않다면 내가 말했던 것처럼 다른 속성을 설정해보십시오. – deviousdodo
함수가 호출 된 것으로 생각하지 않습니다. 경고가 트리거되지 않습니다. 다른 속성으로 질문을 업데이트했지만 경고가 표시되지 않습니다. – Zeynel