我有一个文本编辑器(div),其中有一个function来格式化其中的(选定)文本。当我标记文本的一部分并选择使其看起来像this
(代码段)时,我必须使用
以避免出现一些错误并使其易于使用。但是,此数据正在发送到服务器(nodeJS),并且会导致一个错误,该错误将内容拆分为一个对象,为避免此问题,我想在将
替换为空格后再发送给服务器。
我所做的是以下
// replace by " "
let content = $('.editor').html().replace(/( )/gi, " ");
// replace editor html
$('.editor').html(content);
// print results
console.log("html: ",$('.editor').html());
在控制台中,它显示期望的内容(文本:as <code>dasdasd</code>
):
html: as<span> </span><code>dasdasd</code><span> </span>
但是在服务器端,我遇到以下错误:
TypeError: Cannot convert object to primitive value
然后我决定打印包含编辑器内容的变量(看起来不错吗?):
{ posterContent: 'as<span> </span><code>dasdasd</code><span> </span>' }
问题:如何避免用空格替换
,而不必将html转换为(字符串)以避免这种错误?
答案 0 :(得分:1)
我知道您已经解决了该问题,但是您可能会对阅读此书感兴趣,因为您的问题是由于对Web开发的基本概念(数据编码)的误解引起的。
据我了解,您无法将字符串
传递到后端,因为它被解析为对象,因此我假设您使用GET或POST的application/x-www-form-urlencoded
编码进行发送请求。简单来说:
// this object
{
a: 10,
b: 20
}
// get passed to the server as this string
a=10&b=20
哪个好。那是一种方法。但是您必须处理用于发送特殊字符的正确编码,例如:
// you have this object:
{
a: 10,
b: 'hello&world'
}
// you encode it naively to this
a=10&b=hello world
// the server understands this
{
a: 10,
b: 'hello',
nbsp: ';world'
}
&
会创建bug,因为它是一个特殊字符,不会被当作字符串的一部分来对待。 即使您发现不使用 
或将其替换为空格的技巧,也将认为您已经解决了问题,但是... 几乎所有unicode字符都是特殊字符并且需要进行编码,以免产生错误。。
使用encodeURIComponent
对字符串进行编码,或使用其他编码(例如JSON)发布数据。我个人将使用fetch
之类的函数来为您完成所有工作,并为您避免所有与编码有关的问题:
let data = {
userId: 1,
id: 1
}
fetch('https://jsonplaceholder.typicode.com/posts',{
method: 'POST',
data: JSON.stringify(data)
})
.then(resp => resp.json())
.then(json => console.log(json));