Правильный способ использования результатов почтового запроса для обновления веб-страницы - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в веб-разработке и пытаюсь правильно обновить всплывающее окно, которое я создаю после публикации запроса. То, как я это делаю, кажется слишком запутанным. По сути, у меня есть расширение chrome, которое в определенный момент отправляет запрос в мою базу данных и возвращает URL-адрес. Затем я хочу открыть всплывающее окно и получить URL-адрес, который моя база данных только что доставила во всплывающем окне. Это кажется простым, и я уверен, что мой текущий дизайн чрезмерно усложняет его: в контенте. js я вызываю функцию doWork:

function doWork(itemName, itemPrice) {

    var items = [{'itemName': itemName, 'price': itemPrice}]
    // ajax the JSON to the server
    $.post('https:my/url/receiver', JSON.stringify(items), 
        function(data, status){
            chrome.runtime.sendMessage({type:'open_deals_page', url:data.url})
        });
}

Это получено фоном . js в следующей функции:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.type === 'open_deals_page') {
        chrome.tabs.create({
            url: chrome.extension.getURL('popup.html'),
            active: false
        }, function(tab) {
                chrome.windows.create({
                tabId: tab.id,
                type: 'panel',
                height: 200, width:200,
                focused: true,
                // incognito, top, left, ...
            });
            adjust_window(request.url)
        });
    }
});

, после чего в идеальном мире функция Adjust_Window изменит элемент html с id = 'itemUrl' во всплывающем окне. html ниже:

<!DOCTYPE html><html><head><title>Dialog test</title></head><body>
</title>There is a better deal elsewhere on the web @</title>
<a href="giggle.com" id='itemUrl'>the url you requested</a>
</html>

Излишне говорить, что я не уверен, как настроить функцию Adjust_Window или я вызываю ее в нужном месте. Я пробовал различные jquery селекторы и продолжал получать нулевые значения. Я также запутался в том, как убедиться, что у меня есть доступ к всплывающему окну c, которое я только что открыл. спасибо!

1 Ответ

1 голос
/ 10 апреля 2020

Нужно ли делать веб-запрос от content.js? Это похоже на то, что может произойти в фоновом режиме. Если проблема связана с доступом к jQuery (для $.post), то я бы рекомендовал проверить встроенную функцию fetch. Для вас это выглядело бы примерно так:

fetch(
  'https://your/url/receiver', 
  { 
    method: 'POST', 
    body: JSON.stringify(items)
  }
).then(res => res.json()).then(data => data.url)

. Выше используются «выражения функций стрелок», но если это усложняет понимание, ниже эквивалентно!

fetch(
  'https://your/url/receiver', 
  { 
    method: 'POST', 
    body: JSON.stringify(items)
  }
).then(function(res) { return res.json() }).then(function(data) { return data.url })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...