XMLHttpRequest onreadystatechange语句之后的Javascript对象错误的回调行为

我想要得到h = Af ??????????? 来自社交网站的报告链接的价值。 我用这个测试: http : //jsfiddle.net/rtnNd/6/来检索值,它在我测试时起作用。

但我不希望用户与它进行交互。 脚本必须自动检索页面并获取它的值。 (我使用谷歌Chrome Javascript控制台进行测试)当我尝试使用以下编码时,它会拼写页面并分配给值d并找到h的值,但搜索/替换根本不起作用。 为什么getElementsByClassName不起作用?

使用JQuery:

function getParameterByName(name, path) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(path); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } var URL = 'http://www.facebook.com/zuck'; xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", URL, true); xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml"); xmlhttp.send(); xmlhttp.onreadystatechange = function () { if (xmlhttp.status == 404) { result = error404; } if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var d = xmlhttp.responseText; var jayQuery = document.createElement('script'); jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"; document.getElementsByTagName("head")[0].appendChild(jayQuery); var href = $($('.hidden_elem').d.replace('', '')).find('.itemAnchor[href*="h="]').attr('href'); var fbhvalue = getParameterByName('h', href); alert(fbhvalue); } } 

我去了这个错误,“错误:未捕获TypeError:无法调用方法’替换’未定义”,即使我添加了jquery。

没有JQuery:

  function getParameterByName(name, path) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(path); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } var URL = 'http://www.facebook.com/zuck'; xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", URL, true); xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml"); xmlhttp.send(); xmlhttp.onreadystatechange = function () { if (xmlhttp.status == 404) { // result = error404; } if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { d = xmlhttp.responseText; checker(d); } } function checker(i) { i.value = i; var hiddenElHtml = i.replace('', '').find('.itemAnchor[href*="h="]').attr('href'); var divObj = document.createElement('div'); divObj.innerHTML = hiddenElHtml; var itemAnchor = divObj.getElementsByClassName('itemAnchor')[0]; var href = itemAnchor.getAttribute('href'); var fbId = getParameterByName('h', href); alert(fbId); } 

当我运行它时,我得到了一个名为“object has no method’find’”的错误。

在调用xmlhttp.onreadystatechange语句后,为什么getElementsByClassName,getParameterByName,Jquery,getAttribute不起作用? 请你指点我。 有没有办法找到如何获得价值? 感谢您阅读我的问题并回答!

更新:(如果我在个人资料页面上访问,在谷歌浏览器的javascript控制台中运行以下脚本,它会得到h值 – 但我真的不希望这样…我想指定用户个人资料名称,它必须自动检索并获取它的h值。)

  var jayQuery = document.createElement('script'); jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"; document.getElementsByTagName("head")[0].appendChild(jayQuery); function getParameterByName(name, path) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(path); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); } var href = $($('.hidden_elem')[1].innerHTML.replace('', '')).find('.itemAnchor[href*="h="]').attr('href'); alert(href); var fbId = getParameterByName('h', href); alert(fbId); 

如果您在Facebook外使用此脚本,您肯定会获得SOP ,由于安全原因,它受到限制,请参阅: 访问控制允许来源不允许

所以,让我们假设你得到了响应字符串 xmlhttp.responseText ,所以你不能使用一些只用于DOM对象的JQuery或JavaScript函数,但它只是普通的字符串。 例如,您使用了find()attr()方法,这些方法不适用于字符串。 您可以将其作为字符串使用,仅此而已。

你的“with jQuery”示例在不使用jQuery的情况下做了很多事情 – jQuery做得很好。 您可能想要了解如何将jQuery与AJAX事件一起使用。 看看这些例子并试一试 。

一开始,jQuery可能会令人生畏。 但请继续查看jQuery网站上的示例并试用它们。 查看我的一些旧post以获取更多示例。 和你一样,过去几个月我不得不用火来学习。

并且不要忘记尝试jQueryUI示例 – 当您尝试对话框,选项卡,手风琴等时,您将会欢呼雀跃。

您也可能想要分解一些复杂的jQuery语句,例如:

 var href = $($('.hidden_elem').d.replace('', '')).find('.itemAnchor[href*="h="]').attr('href'); 

在链中添加jQuery方法,如下所示: $('#myElement').dothis(chain1).dothat(chain2).doanother(); 可以快速输入和读取,但很难排除故障。

祝好运!