HTTP-запрос Unity WebGL без IEnumerator или сопрограммы - PullRequest
0 голосов
/ 11 февраля 2019

Как видно из названия, я пытаюсь сделать 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 Ответ

0 голосов
/ 11 февраля 2019

Нет

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 и Unity

jquery.ajax

...