我发现了许多从mysql查询中获取数据的示例。我想传递给jQuery函数的是以JSON格式解析的html内容。我想要做的是将PHP代码与我初始加载的页面分开。我在jQuery Mobile中这样做。我知道,我的描述很糟糕,很难说。
我从index.html中的数据库和输出列表视图中获取文章名称和链接。当用户点击文章时,我将传递URL中的链接,在jQuery中获取它并尝试调用解析该URL的PHP文件。这是所有代码:
的index.html:
<body>
<div data-role="page" id="mainNews">
<div data-role="content">
<ul id="fnews" data-role="listview"></ul>
</div>
</div>
<script src="js/getmainnews.js"></script>
</body>
getmainnews.js:
var serviceURL = "http://localhost/basket/services/";
var news;
$('#mainNews').bind('pageinit', function(event) {
getNews();
});
function getNews() {
$.getJSON(serviceURL + 'getmainnews.php', function(data) {
$('#fnews li').remove();
mainnews = data.items;
$.each(mainnews, function(index, mnews) {
$('#fnews').append('<li data-icon="false"><a style="white-space:normal;" href="newstext.html?url=http://www.basket-planet.com' + mnews.link + '">' + mnews.article + '</a></li>');
});
$('#fnews').listview('refresh');
});
}
getmainnews.php:
<?php
include 'connect_to_mysql.php';
mysql_query("SET NAMES UTF8");
$sql = mysql_query("SELECT * FROM basket_news");
$mainnews = array();
while ($r = mysql_fetch_assoc($sql)){
$mainnews[] = $r;
}
echo '{"items":'. json_encode($mainnews).'}';
?>
一切都很好,但下一页空了。这是接下来的3个文件......对不起,这是一个很长的话题。
newstext.html:
<body>
<div data-role="page" id="newstext">
<div data-role="content">
<div id="textcontent"></div>
</div>
</div>
</body>
newstext.js:
var serviceURL = "http://localhost/basket/services/";
$('#newstext').bind('pageshow', function(event) {
var url = getUrlVars()["url"];
$.getJSON(serviceURL + 'getnewstext.php?url='+url, displayNewsText);
});
function displayNewsText(data){
var newstext = data.item;
$('#textcontent').append(newstext);
}
function getUrlVars() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
最后是getnewstext.php:
<?php
include_once ('simple_html_dom.php');
$url = $_GET['url'];
$html = file_get_html(''.$url.'');
$article = $html->find('div[class=newsItem]');
$a = str_get_html(implode("\n", (array)$article));
@$a->find('div[style*=float]', 0)->outertext = '';
@$a->find('h3', 0)->outertext = '';
@$a->find('div[id=comments]', 0)->outertext = '';
@$a->find('script', 0)->outertext = '';
@$a->find('a[href*=register]', 0)->outertext = '';
@$a->find('div', 4)->outertext = '';
@$a->find('div', 6)->outertext = '';
echo '{"item":'. json_encode($a) .'}';
?>
所以那些是6个文件。在newstext.html上,URL包含我需要传递给我的PHP文件的URL。我确定问题出在最后三个文件中。我在这做错了什么?提前谢谢!
更新:控制台错误已修复,但页面上仍无输出。
Update2:从搜索中,我看到json_encode只接受数组的地方。我在上一个PHP脚本中的$ a是来自包含各种html标记的页面的内容。如何将其转换为数组?要创建一个键/值,其值是所有html内容吗?
答案 0 :(得分:1)
错误getUrlVars is not defined newstext.js:3
说明了一切。您正在调用未在任何地方定义的函数。我做了一个快速搜索,你可能想要this:
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}