stdweb icon indicating copy to clipboard operation
stdweb copied to clipboard

How to obtain XmlHttpRequest response outside clousure.

Open vicky5124 opened this issue 4 years ago • 1 comments

    let mut resp = String::new();
    let xhr = XmlHttpRequest::new();
    xhr.open("GET", &api_url)?;
    xhr.send()?;

    xhr.add_event_listener(|e: ReadyStateChangeEvent| {
        let target: XmlHttpRequest = e.target().unwrap().try_into().unwrap();
        if target.ready_state() == XhrReadyState::Done {
            //resp = xhr.response_text().unwrap().unwrap();
            resp = target.response_text().unwrap().unwrap().to_string();
        }
    });
    // do stuff with the respone, but only if the response is not empty

I can't use move on the clousure, otherwhise i get value borrowed after move as an error.

vicky5124 avatar Mar 25 '20 06:03 vicky5124

You can do something like this:

 xhr.add_event_listener(move |e: ReadyStateChangeEvent| {
            // Magically retrieve the request object through js and std::web
            let xhr = Reference::from(e.target().unwrap()).downcast::<XmlHttpRequest>().unwrap();
            match xhr.ready_state() {
                XhrReadyState::Done => { 
...

But you won't be able to retrieve the headers easily until https://github.com/koute/stdweb/pull/381 is merged

izissise avatar Apr 01 '20 08:04 izissise