0

我终其一生都无法弄清楚如何调用 url,然后将 json 短语化并将其显示在页面上,比如 $w("#Element")。

所以基本上我在 service.jws 的后端做什么

import {fetch} from 'wix-fetch';

// ...

export function  getdata(){

fetch('http://tcokchallenge.com/admin_cp/test3.json', {method: 'get'})
  .then( (httpResponse) => {
    if (httpResponse.ok) {
      return httpResponse.json();
    } else {
      return Promise.reject("Fetch did not succeed");
    }
  } )
  .then(json => console.log(json.glossary["title"]))
  .catch(err => console.log(err));
  }

在前端,它很草率,但这就是我卡住的地方。

import {getdata} from 'backend/service.jsw';

$w.onReady(function () {
console.log('ready');
$w("#Element").glossary.title.getdata();
})

在 JSON 文件中

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}
4

1 回答 1

0

您的代码存在一些问题:

  1. 您不会从后端函数返回 Promise。
  2. 如果你要返回它,你将返回 console.log() 函数的返回值,这不是你想要的。
  3. 在前端,您没有正确调用后端函数。
  4. 此外,您没有正确设置元素的值。

您的后端代码应如下所示:

import {fetch} from 'wix-fetch';

export function  getdata(){
  return fetch('http://tcokchallenge.com/admin_cp/test3.json', {method: 'get'})
    .then( (httpResponse) => {
      if (httpResponse.ok) {
        return httpResponse.json();
      } else {
        return Promise.reject("Fetch did not succeed");
      }
    } );
}

请注意return在获取和删除 console.log 之前。

您的前端代码应如下所示:

import {getdata} from 'backend/service.jsw';

$w.onReady(function () {
  getdata()
    .then( (json) => {
      $w("#Element").value = json.glossary.title;
    } )
    .catch(err => {
      console.log(err);
    } );
} );

请注意,它getdata()返回一个 Promise,因此您需要使用.then()(或async/ await)。另外,您没有说元素Element是什么类型。所以我不能确定你用什么属性来设置它的值。最有可能的候选是.value(用于输入元素)或.text(用于文本元素和文本框)。

于 2018-03-18T19:13:09.913 回答