如何使用 httpPost() 函数从 p5.js JavaScript 库中获取 post xml 数据(例如 xml 文件)?
How to post xml data(for eg. a xml file) from the p5.js JavaScript library using the httpPost() function?
我正在尝试使用 p5.js 中的 loadXML()
函数加载我计算机本地保存的 XML 文件,然后使用 httpPost()
函数来 POST 与通过以下代码期望 XML 文件的服务器相同:
var url = "http://localhost:9000";
var file;
function preload(){
file = loadXML("filename,xml");
}
function setup(){
httpPost(url,"xml",file,success,failure);
}
function success(){}//some stuff to run when it is successful
function failure(){}// when an error is produced.
但我不断收到以下错误:
p5.js:59782 Uncaught (in promise) TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at p5.httpDo (p5.js:59782)
at p5.httpPost (p5.js:59634)
at setup (sketch.js:20)
at p5.<anonymous> (p5.js:46215)
at _runIfPreloadsAreDone (p5.js:46163)
at p5._decrementPreload (p5.js:46173)
at p5.js:59339
at p5.js:59851
xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<TALLYREQUEST>Export</TALLYREQUEST>
<TYPE>Data</TYPE>
<ID>List of Ledgers</ID>
</HEADER>
<BODY>
<DESC>
<TDL>
<TDLMESSAGE>
<REPORT NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<FORMS>List of Ledgers</FORMS>
</REPORT>
<FORM NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPPARTS>List of Ledgers</TOPPARTS>
<XMLTAG>"List of Ledgers"</XMLTAG>
</FORM>
<PART NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPLINES>List of Ledgers</TOPLINES>
<REPEAT>List of Ledgers : Collection of Ledgers</REPEAT>
<SCROLLED>Vertical</SCROLLED>
</PART>
<LINE NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<LEFTFIELDS>List of Ledgers</LEFTFIELDS>
</LINE>
<FIELD NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<SET>$Name</SET>
<XMLTAG>"NAME"</XMLTAG>
</FIELD>
<COLLECTION NAME="Collection of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TYPE>Ledger</TYPE>
</COLLECTION>
</TDLMESSAGE>
</TDL>
</DESC>
</BODY>
</ENVELOPE>
编辑 1:
我尝试使用 loadStrings() 函数,它使用以下代码与 httpPost 方法完美配合 -
list = loadStrings("ListLedgers.xml");
function setup(){
list = list.join('');
httpPost(url,"xml",list,yay,oops);
}
如果我是你,我会尝试做一些更简单的工作。你能用 XML 的更基本的部分让它工作吗?您可以对 XML 进行硬编码,看看是否可行吗?
如果你 google 你的错误 "Converting circular structure to JSON at JSON.stringify"
你会得到很多结果。基本上,如果对象包含循环引用,则不能将其转换为 JSON。
然后查看 P5.js reference,您会注意到 p5.XML
类型包含一个循环引用及其 getParent()
函数。
这是导致错误的原因:httpPost()
函数正试图将您的 XML 转换为 JSON,但它不能这样做,因为它包含循环引用。
要解决您的问题,您有以下几种选择:
- 找出
httpPost()
函数将 XML 转换为 JSON 的原因。这闻起来像个错误,所以我会进行更多调试以弄清楚发生了什么。
- 您可以将 XML 转换为字符串。
getContent()
函数在这里可能有所帮助。
- 您可以将 XML 作为文本或字节加载,而不是将其加载为 XML。
以上只是猜测,因为我实际上无法 运行 您的代码,但希望这能让您畅通无阻。祝你好运。
我正在尝试使用 p5.js 中的 loadXML()
函数加载我计算机本地保存的 XML 文件,然后使用 httpPost()
函数来 POST 与通过以下代码期望 XML 文件的服务器相同:
var url = "http://localhost:9000";
var file;
function preload(){
file = loadXML("filename,xml");
}
function setup(){
httpPost(url,"xml",file,success,failure);
}
function success(){}//some stuff to run when it is successful
function failure(){}// when an error is produced.
但我不断收到以下错误:
p5.js:59782 Uncaught (in promise) TypeError: Converting circular structure to JSON at JSON.stringify (<anonymous>) at p5.httpDo (p5.js:59782) at p5.httpPost (p5.js:59634) at setup (sketch.js:20) at p5.<anonymous> (p5.js:46215) at _runIfPreloadsAreDone (p5.js:46163) at p5._decrementPreload (p5.js:46173) at p5.js:59339 at p5.js:59851
xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<TALLYREQUEST>Export</TALLYREQUEST>
<TYPE>Data</TYPE>
<ID>List of Ledgers</ID>
</HEADER>
<BODY>
<DESC>
<TDL>
<TDLMESSAGE>
<REPORT NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<FORMS>List of Ledgers</FORMS>
</REPORT>
<FORM NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPPARTS>List of Ledgers</TOPPARTS>
<XMLTAG>"List of Ledgers"</XMLTAG>
</FORM>
<PART NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPLINES>List of Ledgers</TOPLINES>
<REPEAT>List of Ledgers : Collection of Ledgers</REPEAT>
<SCROLLED>Vertical</SCROLLED>
</PART>
<LINE NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<LEFTFIELDS>List of Ledgers</LEFTFIELDS>
</LINE>
<FIELD NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<SET>$Name</SET>
<XMLTAG>"NAME"</XMLTAG>
</FIELD>
<COLLECTION NAME="Collection of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TYPE>Ledger</TYPE>
</COLLECTION>
</TDLMESSAGE>
</TDL>
</DESC>
</BODY>
</ENVELOPE>
编辑 1: 我尝试使用 loadStrings() 函数,它使用以下代码与 httpPost 方法完美配合 -
list = loadStrings("ListLedgers.xml");
function setup(){
list = list.join('');
httpPost(url,"xml",list,yay,oops);
}
如果我是你,我会尝试做一些更简单的工作。你能用 XML 的更基本的部分让它工作吗?您可以对 XML 进行硬编码,看看是否可行吗?
如果你 google 你的错误 "Converting circular structure to JSON at JSON.stringify"
你会得到很多结果。基本上,如果对象包含循环引用,则不能将其转换为 JSON。
然后查看 P5.js reference,您会注意到 p5.XML
类型包含一个循环引用及其 getParent()
函数。
这是导致错误的原因:httpPost()
函数正试图将您的 XML 转换为 JSON,但它不能这样做,因为它包含循环引用。
要解决您的问题,您有以下几种选择:
- 找出
httpPost()
函数将 XML 转换为 JSON 的原因。这闻起来像个错误,所以我会进行更多调试以弄清楚发生了什么。 - 您可以将 XML 转换为字符串。
getContent()
函数在这里可能有所帮助。 - 您可以将 XML 作为文本或字节加载,而不是将其加载为 XML。
以上只是猜测,因为我实际上无法 运行 您的代码,但希望这能让您畅通无阻。祝你好运。