我从PHP接收数据作为数组或数组,例如:public class BlogController : Controller
{
public int BlogCount = 0;
// GET: Blog
[Authorize]
public ActionResult Index()
{
return View();
}
public ActionResult Blogs(int id)
{
OMSDataContext db = new OMSDataContext();
Blog blog = new Blog();
var countrow = from c in db.Blogs
where c.UserName == this.User.Identity.Name
group c by c.Id into gp
select new
{
Count = gp.Count(),
};
BlogCount =Convert.ToInt32(countrow);
ViewData["BlogCount"] = 0;
//if(blog.UserName == this.User.Identity.Name)
//{
// BlogCount = blog
//}
return View();
}
然后我在div中显示这些数据。然后,我浏览显示输出中的每个图像并更改src并添加属性。然后,我得到该div的[[1, "<p>hello</p><img src='blah.jpg'/>"], [2, "blah, blah"].....etc]
并将其放在变量中。
的JavaScript
.innerHTML
我面临的问题是我想将var data = <?php echo $data; ?>;
document.getElementById("info").innerHTML = data;
var images = document.querySelectorAll("img");
for (var i = 0; i < images.length; ++i){
/*Get image path*/
var tempSrc = images[i].src;
var imgName = tempSrc.split("/").pop();
/*Change image path to loading image*/
images[i].src = "../../resources/media/assets/650x450.png";
images[i].setAttribute('data-src', tempSrc);
images[i].setAttribute('data-mobile-src', "/stories/media/images/small-images/" + imgName);
}
var transformedData = document.getElementById("info").innerHTML;
console.log(transformedData);
解析回JSON,但我不能,因为现在transformedData
又回到常规字符串。如何使transformedData
返回到数组数组?
一些注释
例如, var data = transformedData
数据如下所示:<?php echo $data; ?>;
,[[1, "<p>hello</p><img src='blah.jpg'/>"]
当我执行[2, "blah, blah"].....etc]
时,它返回为对象因此它已被解析为JSON
console.log(typeof(data))
无效我得到的错误是:JSON.parse()
这就是转换数据的外观:Uncaught SyntaxError: Unexpected token , in JSON at position 1
所以它不再是数组格式
答案 0 :(得分:2)
获取数据后,您要做的第一件事就是将其推送到#info
,这会对您的数据调用Array.toString()
并且是有损的。相反,在发送出来进行显示之前,尽可能长时间使用数组。您可以为数据中的每个HTML字符串创建一个DOM元素,对该元素执行操作,并将转换后的数据发送到新数组中。
const data = [
[1, "<p>hello</p><img src='blah.jpg'/>"],
[2, "blah, blah"]
];
const transformedData = data.map(a => {
const div = document.createElement('div'); // whatever #info is
div.innerHTML = a[1];
const images = div.querySelectorAll("img");
for (var i = 0; i < images.length; ++i) {
/*Get image path*/
var tempSrc = images[i].src;
var imgName = tempSrc.split("/").pop();
/*Change image path to loading image*/
images[i].src = "../../resources/media/assets/650x450.png";
images[i].setAttribute('data-src', tempSrc);
images[i].setAttribute('data-mobile-src', "/stories/media/images/small-images/" + imgName);
}
return [a[0], div.innerHTML];
});
document.getElementById("info").innerHTML = transformedData;
console.log(transformedData);
<div id="info"></div>
答案 1 :(得分:0)
您应该将JSON函数看作
JSON.stringify()
或
JSON.parse()来
传递的注释值必须有效。
答案 2 :(得分:0)
如果您现在的字符串看起来像<p>a</p> <p>b</p>
,那么只需在p
标记上添加一些类,然后将其收集到JSON
中。然后,您需要构建p
标记文本内容的数组,但此数组必须是字符串。你可以这样做:
let arr = documents.getElementsByClassName('yourClass')
let strArray = '['
for (let i = 0; i < arr.length - 1; i++) {
strArray += arr[i].textContent + ', '
}
strArray += arr[arr.length - 1].textContent
JSON.parse(strArray + ']')
答案 3 :(得分:0)
您的格式无法显式解析为JSON。您必须遍历循环以格式化它或者如果您可以控制您的PHP代码,请在服务器本身中分配javascript变量。您可以定义两个变量