javascript userdata 的save 和load 方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript userdata 的save 和load 方法相关的知识,希望对你有一定的参考价值。

在IE上测试该方法出现错误,对象不支持此属性或方法,请高手帮忙解决,不胜感谢
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Example 15.3 userData 文本框标记的应用</title>
<style>
.userData behavior:url(#default#userdata);
</style>
<script language="javascript" type="text/javascript">
function fnSaveInput()
var oPersist=oPersistForm.oPersistInput;
oPersist.setAttribute("sPersist",oPersist.value);
oPersist.save("oXMLBranch");

function fnLoadInput()
var oPersist=oPersistForm.oPersistInput;
oPersist.load("oXMLBranch");
oPersist.value=oPersist.getAttribute("sPersist");

</script>
</head>

<body>
<form id="oPersistForm">
<input class="userdata" type="text" id="oPersistInput" />
<input type="button" value="load" onclick="fnLoadInput()" />
<input type="button" value="save" onclick="fnSaveInput()" />
</form>
</body>
</html>

这两句:
oPersist.save("oXMLBranch");
oPersist.load("oXMLBranch");
IE中是不支持的。
几个主流的浏览器对Javascript支持是不同的,兼容性很差。
你把这两行注释掉,再执行就可以,就因为默认浏览器不支持这两个方法

参考资料:http://www.bjzero.net

参考技术A oPersist.setAttribute("sPersist",oPersist.value);
oPersist.save("oXMLBranch");
oPersist.load("oXMLBranch");
oPersist.value=oPersist.getAttribute("sPersist");
这4句话都有问题,js中不提供这些方法。不知道你想要实现什么,要用jquery的话要用jquery的规范并且引入jquery.js追问

这是userdata的方法 是书上完整的例子,可是我测试时却出现网页错误

追答

书上的例子都是不完整的,js根本都不支持那些方法,建议你看视频学习,书有时候很坑爹

TypeError:即使 userData 是数组,userData.map 也不是函数

【中文标题】TypeError:即使 userData 是数组,userData.map 也不是函数【英文标题】:TypeError: userData.map is not a function even though userData is an array 【发布时间】:2019-05-10 00:05:24 【问题描述】:

我对做出反应并尝试从 .json 文件(称为 userData.json)中获取数据非常陌生,但是即使 userData 是一个数组,.map 也无法正常工作。

我已经检查过了

 console.log(Array.isArray(userData));
console.log(typeof userData);

它会回馈“真实”和“对象”。

知道我做错了什么吗? 以下是截取的全部代码:

import React from "react";
import Table from "@material-ui/core/Table";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableHead from "@material-ui/core/TableHead";
import TableRow from "@material-ui/core/TableRow";
import Paper from "@material-ui/core/Paper";

class JsonTable extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      userData: [],
      error: undefined
    ;
  
  componentDidMount() 
    fetch("../data/userData.json").then(
      result => 
        this.setState(
          userData: result
        );
      ,
      error => 
        this.setState( error );
      
    );
  
  render() 
    const  userData  = this.state;
    console.log(Array.isArray(userData));
    console.log(typeof userData);
    return (
      <Paper>
        <Table>
          <TableHead>
            <TableRow>
              <TableCell>Name</TableCell>
              <TableCell>Foto</TableCell>
              <TableCell>Kategorie</TableCell>
              <TableCell>Kontaktinformation</TableCell>
              <TableCell>Job</TableCell>
              <TableCell>Notiz</TableCell>
            </TableRow>
          </TableHead>
          <TableBody>
            userData.map(row => 
              return (
                <TableRow key=row.id>
                  <TableCell component="th" scope="row">
                    row.name
                  </TableCell>
                  <TableCell>row.image</TableCell>
                  <TableCell>row.category</TableCell>
                  <TableCell>row.contactInfo</TableCell>
                  <TableCell>row.job</TableCell>
                  <TableCell>row.note</TableCell>
                </TableRow>
              );
            )
          </TableBody>
        </Table>
      </Paper>
    );
  


export default JsonTable;

【问题讨论】:

result 是什么? 在我的生活中没有使用过 fetch,但显然,您正在获取 json。你不应该使用一些.json() 方法将json转换为数组吗? 【参考方案1】:

但即使 userData 是一个数组,.map 也不起作用。

没有。 render() 被调用两次。第一次,初始状态被渲染,userData 是一个空数组,你得出结论userData 是一个数组。这一次,映射不会失败。现在数据被获取了,你调用setStateuserData 是一个响应对象(这就是fetch() 解析为),这一次,Array.isArray 将返回false(但你不知何故还没有看到),而.map 不存在。

要解析fetch 调用的结果并获取一个数组,请使用.json()

 fetch("../data/userData.json")
   .then(res => res.json())
   .then(result => /*...*/)

【讨论】:

【参考方案2】:

你是不是忘了提取json的正文?

fetch("../data/userData.json")
  .then(
     (result) => result.json()
  )
     .then((userData) => 
        this.setState(
           userData,
        );
     )

另一件事——以防万一——我会确保userData 不是数组。

Array.isArray(userData) && userData.map(row =>  ...  

【讨论】:

json() 返回一个承诺? @JonasWilms 是的,你是对的。忘了第二个then 关于第二部分:我宁愿让setState neber 被非数组userData 调用。 @JonasWilms 对于后代来说,这只是一个提示

以上是关于javascript userdata 的save 和load 方法的主要内容,如果未能解决你的问题,请参考以下文章

JS本地存储信息的实现方式(localStorage 与 userData)

如何在 AWS Lambda 上创建 EC2 时将脚本传递给 UserData 字段?

javascript定时保存表单数据的代码

Parse Javascript Cloud Code .save() 仅适用于单个用户

TypeError:即使 userData 是数组,userData.map 也不是函数

IE中的userData