Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨域Javascript-拉元标记_Javascript_Jquery - Fatal编程技术网

跨域Javascript-拉元标记

跨域Javascript-拉元标记,javascript,jquery,Javascript,Jquery,我正在构建Meteor.js应用程序,我想做的一件事是从保存的页面中提取标题和元描述标签。我正在使用并且有一半的代码在工作 这是摘录;它接受标记为“url”的表单中给定的值并运行代码: $.get(url, function(response){ if ((suggestedTitle=((/<title>(.*?)<\/title>/m).exec(response.responseText))) != null){ $('#title'

我正在构建Meteor.js应用程序,我想做的一件事是从保存的页面中提取标题和元描述标签。我正在使用并且有一半的代码在工作

这是摘录;它接受标记为“url”的表单中给定的值并运行代码:

$.get(url, function(response){
      if ((suggestedTitle=((/<title>(.*?)<\/title>/m).exec(response.responseText))) != null){
          $('#title').val(suggestedTitle[1]);
      }else{
          $('#title').val(url);
      }
      if ((suggestedDesc=($('meta[name=description]').attr('content'))) != undefined){
        $('#desc').val(suggestedDesc[1]);
      }else{
        $('#desc').val('Description for this page cannot be found.');
      }
   });
$.get(url、函数(响应){
if((suggestedTitle=((/(.*))/m.exec(response.responseText))!=null){
$(#title').val(建议标题[1]);
}否则{
$('#title').val(url);
}
if((suggestedDesc=($('meta[name=description]')).attr('content'))!=未定义){
$('#desc').val(suggestedDesc[1]);
}否则{
$('#desc').val('找不到此页的说明');
}
});

我认识到使用正则表达式解析HTML不是最佳做法(可以接受关于替代方案的建议,但我没有仔细研究),但除此之外,该脚本成功地从URL中提取标题,或者在找不到的情况下返回网址,但描述失败,只返回回退文本。非常感谢您的帮助,谢谢:)

不要使用正则表达式或jQuery来解析响应,而是使用DOM方法来遍历响应文本。试试这个:

$.ajax({
    url: "http://www.google.com",
    type: "GET",
    async: true
}).done(function (response) {
    var div = document.createElement("div"),
        responseText = response.results[0],
        title, metas, meta, name, description, i;
    div.innerHTML = responseText;
    title = div.getElementsByTagName("title");
    title = title.length ? title[0].innerHTML : undefined;
    metas = div.getElementsByTagName("meta");
    for (i = 0; i < metas.length; i++) {
        name = metas[i].getAttribute("name");
        if (name === "description") {
            meta = metas[i];
            description = meta.getAttribute("content");
            break;
        }
    }
    console.log("Title:", title);
    console.log("Description:", description);
}).fail(function (jqXHR, textStatus, errorThrown) {
    console.log("AJAX ERROR:", textStatus, errorThrown);
});
$.ajax({
url:“http://www.google.com",
键入:“获取”,
异步:true
}).完成(功能(响应){
var div=document.createElement(“div”),
responseText=response.results[0],
标题,元,元,名称,描述,i;
div.innerHTML=responseText;
title=div.getElementsByTagName(“title”);
title=title.length?title[0]。innerHTML:未定义;
metas=div.getElementsByTagName(“meta”);
对于(i=0;i
演示:

我把你提供的插件放在最上面(它被缩小了,这样你就可以看到你自己的代码了

显然,这使用了
http://www.google.com
,但您应该能够放入任何URL,并且它的工作原理相同。此外,您可以将其放入一个可重用函数中-我只是想展示一个示例。我假设它与
$.get()
的工作原理相同,而不是
$.ajax()

您不能直接使用
response.responseText
,因为返回的项目是由一些内容组成的对象。要获取HTML,您可以使用
response.results[0]
response.results
显然是一个数组,我不确定其中还可能包含哪些内容(如索引1、2、3等)


当我尝试使用
$(response.results[0])
时,我发现奇怪的事情发生了,所以我坚持使用普通的DOM操作。

使用
$(response.responseText)。find('meta[name=“description”]”)
或其他任何东西。没有
$(response.responseText)
part,你不是在看响应,而是在看当前页面。既然你已经知道使用正则表达式解析HTML不是一个好方法,那么就让jQuery用正确的方法来解析它;然后遍历DOM对象。我已经尝试过这个方法,但由于某种原因仍然无法让它工作……它告诉我响应是未定义的。我添加了一个meta descr在我的页面上添加iption,看看它是否会尝试使用它…您有更长的代码示例吗?我刚刚添加了一个似乎有效的答案。我希望它能有所帮助!