2012-11-22 26 views
-4

我想要獲取h = Af ??????????來自社交網站上報告鏈接的價值。我用這個測試:http://jsfiddle.net/rtnNd/6/來檢索值,它在我測試出來的時候有效。XMLHttpRequest onreadystatechange語句後Javascript對象錯誤的回調行爲

但我不希望用戶與它進行交互。該腳本必須自動檢索該頁面並獲取其值。 (我使用Google Chrome Javascript Console進行測試),當我嘗試使用下面的代碼進行拼字遊戲並將其賦值爲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('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href'); 
       var fbhvalue = getParameterByName('h', href); 
       alert(fbhvalue); 
     } 
} 

我去這個錯誤, 「錯誤:未捕獲的類型錯誤:無法調用未定義的 '取代'」,連我加了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('<!--', '').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); 

} 

當我運行它,我叫了錯誤 「對象有沒有方法 '發現'。」

爲什麼在調用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('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href'); 
    alert(href); 
    var fbId = getParameterByName('h', href); 
    alert(fbId); 
+3

你實際上並沒有用縮進來編碼,看起來像那樣嗎? –

+0

我這樣做,因爲你知道我是新手,並堅持這一點。 :( –

+0

這將是第一件需要改變的地方。將你的代碼複製/粘貼到http://jsbeautifier.org,你會更清楚地看到代碼是乾淨的。 –

回答

0

如果你使用Facebook,你一定會得到SOP超出這個腳本,它是有限的,由於安全原因,看到這一點:Access Control Allow Origin not allowed by

所以,讓我們想象一下,你得到了響應字符串xmlhttp.responseText,所以你不能使用一些僅適用於DOM對象的JQuery或JavaScript函數,但它只是純字符串。例如,您使用了find()attr()這些不適用於字符串的方法。你可以玩它作爲一個字符串,沒有更多。

+0

我不打算在facebook以外的地方使用腳本,我只會在facebook上使用Google Chrome Javascript控制檯 所以我得到了從Facebook響應所有的代碼,我將它分配給一個變量,以astring的形式播放它。當我嘗試使用Jq時uery找到它,它不起作用,我不知道爲什麼。 –

+0

@HafiziVilie,正如我告訴過你的,你不能使用'find()'作爲字符串,你只能使用它附加在瀏覽器上的DOM元素。但你從其他地方刪除了東西:) –

+0

是的,我現在得到了答案。它與匹配:) –

2

你「使用jQuery」實例做了很多的東西,而使用jQuery - 東西,jQuery也很好。您可能想了解如何在AJAX事件中使用jQuery。 Look at these examples and try them

在開始時,jQuery可能會讓人感到恐懼。但請繼續關注the jQuery website上的示例並嘗試一下。看看我的一些舊帖子以獲取更多示例。像你一樣,過去幾個月我不得不在火中學習。

而且不要忘記將嘗試jQueryUI的例子 - 你會手舞足蹈,當你嘗試的對話框中,標籤,手風琴等

您還可能要打破你的一些複雜的jQuery語句,比如這一個:

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

添加jQuery方法在這樣的鏈條:$('#myElement').dothis(chain1).dothat(chain2).doanother();是快速輸入和閱讀,但難以排除。

祝你好運!

+0

謝謝。我該如何解決問題以獲取h值? –

相關問題