HTTP-запрос Unity WebGL без IEnumerator или сопрограммы

Как видно из названия, я пытаюсь сделать HTTP-запрос в Unity (WebGL).

В документации, которую я нашел здесь: Сеть WebGL они говорят мне, чтобы создать IEnumerator наберите функцию и вызовите ее через StartCoroutine вызов.

Это все хорошо, моя проблема в том, что мне нужно предоставить обратный звонок HttpRequest в класс, который находится в другой библиотеке.

Мой обратный вызов выглядит так:

private string HttpRequest(string url, string method, string body=null) {

    WWW www = null; // = null is compiler candy

    if (method == "GET") {
        www = new WWW(url);
    } else if (method == "POST") {
        //POST specific implementation...
    } else {
       // do something else
    }

    while (!www.isDone) { } // this is Wrong.
    return www.text;
}

Проблема в том, что если я не вернусь из HttpRequest и вызывающий метод JavaScript не сможет обработать запрос. Но с другой стороны вызывающий метод ожидает string не какой-то IEnumerator,

Есть ли обходной путь, позволяющий JavaScript выполнять свою работу после создания класса WWW?

1 ответ

Решение

Нет

WWW а также UnityWebRequest являются асинхронными.

Чтобы сделать синхронный запрос, вам нужно написать плагин javascript. Использование некоторой библиотеки не очень сложно, например, jquery.

function getdata($url, $method, $data)
{
    var text = '';

    $.ajax({
        url: $url,
        type: $method,
        async: false, //synchronous request
        data: $data,
        success: function(data){
            text = data;
        },
        error: function(data){
            text = data;
        }
    });

    return text;
}

Дополнительная информация:

Связь между JavaScript и единством

jquery.ajax

Другие вопросы по тегам