用 HTML 解析 JSON - modx 段落标记问题
Parse JSON with HTML - modx paragraph tag issue
我正在使用 PHP 到 json_encode 一个数组,然后用 jQuery 的 $.parseJSON() 客户端解析它。
$('.load-more').click(function(e) {
e.preventDefault();
var $this = $(this);
var load = $this.data('current-page') + 1;
var parent = $this.data('parent');
$.ajax({
type: "GET",
url: "http://mysite.mysite/blog/pagination-processor.html",
data: {page: load, parent: parent},
success: function (response) {
response = $.parseJSON(response);
if(response.success) {
$(".post-list").append(response.page);
// Update the page attribute
$this.data('current-page', load);
} else {
$this.after(response.page);
$this.remove();
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("There seems to be a problem.");
}
});
});
PHP 的摘录,我正在使用 json_encode...
if(empty($page)) {
$noResults = $modx->parseChunk('pagination-no-results',array('text' => 'No more posts!'));
return json_encode(array(
'success' => false,
'page' => $noResults
));
} else {
return json_encode(array(
'success' => true,
'page' => $page
));
}
"success: true" 是不言自明的,而 $page 是从 modx getResources 数组创建的。 $page 是 html.
的一大块
$page = $modx->runSnippet('getResources', array(
'parents' => $parent,
'limit' => $limit,
'offset' => $offset,
'includeTVs' => '1',
'tvPrefix' => '',
'includeContent' => '1',
'tpl' => $tpl,
'tplFirst' => $tplFirst
));
这是通过 AJAX 调用返回的内容。
<p>{"success":true,"page":"<div class=\"blog-post\">\n <figure>\n <img src=\"http:\/\/placehold.it\/580x338&text=Blog Image\">\n <\/figure>\n <div class=\"intro\">\n <h1><a href=\"blog\/article-4.html\">Article 4<\/a><\/h1>\n <p><\/p>\n <div class=\"meta\">\n <ul class=\"post-details\">\n <li class=\"published\">\n <time pubdate=\"pubdate\" datetime=\"2014-06-28\">28\/06\/2014<\/time>\n <\/li>\n <li class=\"comments\">\n <a href=\"http:\/\/mysite.mysite\/blog\/article-4.html#disqus_thread\"><\/a>\n <\/li>\n <\/ul>\n <ul class=\"post-tags\">\n <li><a href=\"blog\/blog-filter.html?tag=responsive+design&key=blog-tags\">responsive design<\/a><\/li>\n <\/ul>\n <\/div>\n <\/div>\n<\/div>\n<!-- \/.blog-post -->\n<div class=\"blog-post\">\n <figure>\n <img src=\"http:\/\/placehold.it\/580x338&text=Blog Image\">\n <\/figure>\n <div class=\"intro\">\n <h1><a href=\"blog\/article-5.html\">Article 5<\/a><\/h1>\n <p><\/p>\n <div class=\"meta\">\n <ul class=\"post-details\">\n <li class=\"published\">\n <time pubdate=\"pubdate\" datetime=\"2014-06-28\">28\/06\/2014<\/time>\n <\/li>\n <li class=\"comments\">\n <a href=\"http:\/\/mysite.mysite\/blog\/article-5.html#disqus_thread\"><\/a>\n <\/li>\n <\/ul>\n <ul class=\"post-tags\">\n <li><a href=\"blog\/blog-filter.html?tag=responsive+design&key=blog-tags\">responsive design<\/a><\/li>\n <\/ul>\n <\/div>\n <\/div>\n<\/div>\n<!-- \/.blog-post -->"}</p>
JSON 特殊字符似乎是导致问题的原因(我认为),因为它们没有转义。我尝试了多种不同的方法,但都没有成功。
任何帮助,将不胜感激。
返回的数据具有有效的 JSON 对象 {...}
,后跟结束 HTML 标记 </p>
。这可能是问题所在。
我看到你用 Modx 标记了这个问题。遇到同样的问题几次后,我想我知道为什么 JSON 对象被包裹在 <p>
标签中。
我看到您正在调用 Modx 中的资源。您碰巧 运行 在内容字段中输出 JSON 的片段吗?此内容字段是否使用像 TinyMCE 这样的富文本编辑器?如果是,请转到该页面上的设置,关闭富文本格式,保存更改,刷新页面,然后手动删除现在应该显示的内容字段中的 <p>
标签。
我正在使用 PHP 到 json_encode 一个数组,然后用 jQuery 的 $.parseJSON() 客户端解析它。
$('.load-more').click(function(e) {
e.preventDefault();
var $this = $(this);
var load = $this.data('current-page') + 1;
var parent = $this.data('parent');
$.ajax({
type: "GET",
url: "http://mysite.mysite/blog/pagination-processor.html",
data: {page: load, parent: parent},
success: function (response) {
response = $.parseJSON(response);
if(response.success) {
$(".post-list").append(response.page);
// Update the page attribute
$this.data('current-page', load);
} else {
$this.after(response.page);
$this.remove();
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("There seems to be a problem.");
}
});
});
PHP 的摘录,我正在使用 json_encode...
if(empty($page)) {
$noResults = $modx->parseChunk('pagination-no-results',array('text' => 'No more posts!'));
return json_encode(array(
'success' => false,
'page' => $noResults
));
} else {
return json_encode(array(
'success' => true,
'page' => $page
));
}
"success: true" 是不言自明的,而 $page 是从 modx getResources 数组创建的。 $page 是 html.
的一大块$page = $modx->runSnippet('getResources', array(
'parents' => $parent,
'limit' => $limit,
'offset' => $offset,
'includeTVs' => '1',
'tvPrefix' => '',
'includeContent' => '1',
'tpl' => $tpl,
'tplFirst' => $tplFirst
));
这是通过 AJAX 调用返回的内容。
<p>{"success":true,"page":"<div class=\"blog-post\">\n <figure>\n <img src=\"http:\/\/placehold.it\/580x338&text=Blog Image\">\n <\/figure>\n <div class=\"intro\">\n <h1><a href=\"blog\/article-4.html\">Article 4<\/a><\/h1>\n <p><\/p>\n <div class=\"meta\">\n <ul class=\"post-details\">\n <li class=\"published\">\n <time pubdate=\"pubdate\" datetime=\"2014-06-28\">28\/06\/2014<\/time>\n <\/li>\n <li class=\"comments\">\n <a href=\"http:\/\/mysite.mysite\/blog\/article-4.html#disqus_thread\"><\/a>\n <\/li>\n <\/ul>\n <ul class=\"post-tags\">\n <li><a href=\"blog\/blog-filter.html?tag=responsive+design&key=blog-tags\">responsive design<\/a><\/li>\n <\/ul>\n <\/div>\n <\/div>\n<\/div>\n<!-- \/.blog-post -->\n<div class=\"blog-post\">\n <figure>\n <img src=\"http:\/\/placehold.it\/580x338&text=Blog Image\">\n <\/figure>\n <div class=\"intro\">\n <h1><a href=\"blog\/article-5.html\">Article 5<\/a><\/h1>\n <p><\/p>\n <div class=\"meta\">\n <ul class=\"post-details\">\n <li class=\"published\">\n <time pubdate=\"pubdate\" datetime=\"2014-06-28\">28\/06\/2014<\/time>\n <\/li>\n <li class=\"comments\">\n <a href=\"http:\/\/mysite.mysite\/blog\/article-5.html#disqus_thread\"><\/a>\n <\/li>\n <\/ul>\n <ul class=\"post-tags\">\n <li><a href=\"blog\/blog-filter.html?tag=responsive+design&key=blog-tags\">responsive design<\/a><\/li>\n <\/ul>\n <\/div>\n <\/div>\n<\/div>\n<!-- \/.blog-post -->"}</p>
JSON 特殊字符似乎是导致问题的原因(我认为),因为它们没有转义。我尝试了多种不同的方法,但都没有成功。
任何帮助,将不胜感激。
返回的数据具有有效的 JSON 对象 {...}
,后跟结束 HTML 标记 </p>
。这可能是问题所在。
我看到你用 Modx 标记了这个问题。遇到同样的问题几次后,我想我知道为什么 JSON 对象被包裹在 <p>
标签中。
我看到您正在调用 Modx 中的资源。您碰巧 运行 在内容字段中输出 JSON 的片段吗?此内容字段是否使用像 TinyMCE 这样的富文本编辑器?如果是,请转到该页面上的设置,关闭富文本格式,保存更改,刷新页面,然后手动删除现在应该显示的内容字段中的 <p>
标签。