我有一个网页编写技术都在PHP中解决,直到我发现我正在开发它的平台(iOS通过手机间隙)不支持PHP。我通过JS找到了解决方案。
$(document).ready(function(){
var container = $('#target');
$('.ajaxtrigger').click(function(){
doAjax($(this).attr('href'));
return false;
});
function doAjax(url){
if(url.match('^http')){
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20*%20from%20html%20where%20url%3D%22"+
encodeURIComponent(url)+
"%22&format=xml'&callback=?",
function(data){
if(data.results[0]){
var data = filterData(data.results[0]);
container.html(data);
} else {
var errormsg = '<p>Error: could not load the page.</p>';
container.html(errormsg);
}
}
);
} else {
$('#target').load(url);
}
}
function filterData(data){
data = data.replace(/<?\/body[^>]*>/g,'');
data = data.replace(/[\r|\n]+/g,'');
data = data.replace(/<--[\S\s]*?-->/g,'');
data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
data = data.replace(/<script.*\/>/,'');
return data;
}
});
加载网址的方式是点击链接,然后获取href
,并填充url
(至少我认为)。我希望网址是静态的,例如http://website.com
并且预先填充。我尝试用doAjax(url)
替换所有doAjax('http://website.com)
,但这似乎不起作用,我想知道我做错了什么。
新JS脚本的另一个问题是我希望能够解析结果并仅显示table
元素。在PHP中,我使用:
data = $html->find('table');
echo $data[1];
该PHP函数的javascript中的等价物是什么?
在旁注中,我正在考虑将其分成两个帖子,但我认为今晚会有太多帖子:)
编辑:@nnnnnn在评论中解决了第一个问题。
答案 0 :(得分:1)
至于第一部分,试试这个:
function doAjax(url) {
url = url || 'http://website.com'; // fallback to str if url isnt defined
// ... rest of your code
}
第二部分尝试(假设data.results[0]
是原始html的位置):
$(data.results[0]).find('table'); // may have to use .filter() if node is in root
答案 1 :(得分:1)
如果您在点击链接时(通过点击处理程序调用{{1}}功能)说上述代码有效,但您还想自动为doAjax()
调用它而无需点击,只需将'http://website.com'
添加到document.ready函数的末尾。
至于从响应中提取一个特定的表,在你的ajax回调函数中你可以从返回的数据创建一个jQuery对象,然后使用jQuery的.find()
方法来提取你关心的部分,以及.append()
将该部分添加到容器元素中:
doAjax('http://website.com');
请注意, function(data){
if(data.results[0]){
var fullResponse = $(filterData(data.results[0])),
justTable = fullResponse.find("table");
container.append(justTable);
} else {
var errormsg = '<p>Error: could not load the page.</p>';
container.html(errormsg);
}
}
的选择器可能需要更多信息才能明确选择您正在谈论的表格。不确定.find()
是否会这样做,或者该表是否具有您可以使用的ID属性:"table:first"
或者......?