Parse.com Добавление облачного кода к html-кнопкам

Я тестирую некоторые функции локально, используя мою базу данных, созданную на parse.com, и функции работают точно так, как предполагалось. Сейчас я пытаюсь поместить эти функции в облачный код, чтобы уменьшить количество запросов, отправляемых на синтаксический анализ, а также выполнять запросы в облачном коде, а не локально. По какой-то причине я не могу заставить эти функции работать, когда конвертирую их в облачный код. Кроме того, как мне сделать кнопку в html, которая может запускать функцию в облачном коде?

До облачного кода моя html-кнопка выглядела так:

<button type="button" onclick="authenticate()">Log-In</button>

Как мне создать эту кнопку с облачным кодом, которая выглядит так:

Parse.Cloud.define("authenticate()", function(request, response) {
    var myname = document.getElementById("username").value;
    var mypass = document.getElementById("psswd").value;

    Parse.User.logIn(myname, mypass, {
        success: function(user) {
            // Do stuff after successful login.
             if(myname == "test1" || myname == "test2"){
                window.location.href="itSplash.html";
            }
            else{
                window.location.href="ticketRequest.html";
            }           
        }, 
        error: function(user, error) {
            // The login failed. Check error to see why.
            alert("Failed to login: " + error.message);
        }
    });
});

для пояснения, что оператор if просто направляет вход в систему itSplash, если имя пользователя соответствует test1 или test2, и ticketRequest, если это кто-то еще. У нас есть отдельная страница для разных пользователей. Кроме того, эта функция работает локально, если я создаю ее как обычную функцию аутентификации(). Когда я преобразовал его в облачный код, как показано выше, он не будет работать. Я создаю отдельную функцию с именем runAuthenticate() с вызовом Parse.Cloud.run внутри нее, и она там не работает. Все, что я получил, это ошибка, говорящая, что определение не может быть использовано для этого объекта. Любая помощь?


person Joseph Ebey    schedule 02.06.2015    source источник
comment
Вы проверили журнал ошибок, чтобы увидеть, что он говорит вам, что он не определен, и пытались ли вы запустить облачную функцию из curl?   -  person Wain    schedule 02.06.2015
comment
Я запустил код в режиме отладчика. Из того, что я могу сказать, он даже не запускает никаких функций, поэтому все еще не определено. Прежде чем он запустит что-либо, он выдает ошибку в части Parse.Cloud.define, в которой говорится, что что-то в строках определения не может быть использовано для этого объекта. Я протестировал образец кода hello world cloud, представленный на Parse.com, и он работает нормально, но что-то в приведенном выше коде не работает. Я буквально скопировал и вставил его из js-файла, который использовал для локального запуска.   -  person Joseph Ebey    schedule 02.06.2015


Ответы (2)


Вы можете связать кнопку HTML с функцией облачного кода с помощью Parse.Cloud.run.

Ознакомьтесь с документацией кода Parse Cloud.

Вот как вы можете вызвать облачный код из javascript.

Parse.Cloud.run('hello', {}, {
    success: function(result) {
        // result is 'Hello world!'
    },
    error: function(error) {
        //  Error while running cloud code
    }
});

Как вы написали, вы можете попробовать вызвать метод javascript, нажав кнопку HTML, а затем вызвать метод Parse.Cloud.run.

person sudheeshcm    schedule 03.06.2015

Во-первых, у вас нет доступа к document или window в облачном коде, поэтому вам нужно переосмыслить, откуда вы пришли.

Кроме того, нецелесообразно отправлять данные пользователя в облачный код, вы должны войти на веб-страницу с помощью SDK, а затем использовать SDK для запуска облачного кода, и он отправит данные пользователя и аутентификации.

Таким образом, вся предпосылка вашей функции authenticate в облачном коде на самом деле не работает.

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

person Wain    schedule 02.06.2015
comment
Помощь/совет, которые я искал, были больше связаны с тем, почему способ, которым я настроил этот облачный код, привел к тому, что он не работал. Является ли доступ к документу/окну причиной появления ошибок? Вы правы в том, что в функции нет запросов. У меня есть несколько других функций, которые я не перечислил, которые используют запросы. Это намного сложнее, поэтому я хотел попробовать заставить эту более простую функцию работать, прежде чем пытаться ее на них. Кроме того, я до сих пор понятия не имею, как запустить облачный код на кнопке HTML. Если бы я мог заставить это не отображать ошибки и узнать, как использовать Parse.Cloud.run для кнопки html, это было бы здорово - person Joseph Ebey; 02.06.2015
comment
Кроме того, спасибо за вклад в документ и окно. Я не решался добавить эту функцию в облачный код, так как это не сильно улучшит производительность (я предполагаю). Я просто хотел посмотреть, смогу ли я заставить одну из моих более простых функций успешно работать в облачном коде, но я даже не могу пройти загрузку страницы, прежде чем получаю ошибки. - person Joseph Ebey; 02.06.2015
comment
наличие () в имени функции, вероятно, является проблемой. Тогда да, document и window не определены, поэтому вы получите ошибки. У Parse есть журнал ошибок, который вы можете просмотреть, и он расскажет вам о проблемах. - person Wain; 02.06.2015
comment
Помните, что вы можете добавить функцию в облачный код, которая просто возвращает строку и использовать ее для тестирования... Пусть кнопка html запускает функцию JS, и эта функция использует Parse.Cloud.run для выполнения облачного кода и обработки ответа. - person Wain; 02.06.2015
comment
Поэтому мне, вероятно, следует изменить его так, чтобы мой Parse.Cloud.define содержал весь мой фактический код, а затем создать функцию, которая будет просто выполнять Parse.Cloud.run, а затем вместо этого связать эту функцию с кнопкой? Даже без () это все еще вызывало ошибки, но я попытаюсь опустить функции окна и документа и посмотреть, изменит ли это что-нибудь. - person Joseph Ebey; 02.06.2015
comment
Да. И вы должны зайти в веб-консоль синтаксического анализа и посмотреть журнал ошибок (часть раздела Core), чтобы увидеть, что, по его словам, идет не так. - person Wain; 02.06.2015
comment
Хорошо, я посмотрел в отладчике немного больше. Когда я смотрю на объект Parse.Cloud.define, особенно на часть Parse.Cloud, я вижу прото-данные, методы и т. д. Когда я смотрю в разделе «Методы», запускается единственный применимый метод для Parse.Cloud. Я не вижу определения, afterUpdate, beforeUpdate или что-то еще. - person Joseph Ebey; 03.06.2015
comment
также забыл упомянуть, что даже с обработчиками ответов они не отправляются в журнал. Это никогда не заходит так далеко ... Я установил их как response.success (это сработало); и ответ.ошибка(не работает); но я никогда не вижу их в журнале - person Joseph Ebey; 03.06.2015
comment
Они не регистрируются, они возвращаются вызывающему абоненту. Ошибки выполнения и console.log регистрируются. - person Wain; 03.06.2015