2011-10-29 48 views
1

我想寫一個使用jquery從維基百科API獲取數據的Firefox擴展。我打電話的getJSON這樣的:正在執行getJSON不返回任何Firefox的擴展

jqxhr = $.getJSON("http://en.wikipedia.org/w/api.php?action=parse&format=json&callback=?", {page:wikipediaPage, prop:"text|images", uselang:"en"}, function() {dump("success?\n");}).error(function() { dump("error?\n"); }); 

此代碼,因爲腳本不停止運行,我沒有看到一個例外,但沒有無論是從成功或錯誤響應功能。當我把它放入我的電腦上的HTML文檔並從瀏覽器運行時,代碼就起作用了,但是在擴展中它失敗了。

我完全不熟悉JavaScript和jQuery,所以任何幫助將不勝感激!

這裏是代碼時的網頁加載的工作:

<html> 
<head> 
    <style> 
     a.test {font-weight : bold; } 
    </style> 
</head> 
<body> 

    <a href="http://jquery.com/">jQuery</a> 
    <script src="jquery.js"></script> 
    <div id="insertTest"></div> 

    <script> 
     var wikipediaHTMLResult = function(data) { 
      document.write("<p>Inside callback</p>"); 
      document.write("Text data: " + data); 
      var readData; 
      for(x in data){ 
       for(y in data[x]){ 
        for(z in data[x][y]){ 
         readData += data[x][y][z]; 
        } 
       } 
      } 
      var arrayData = jQuery.makeArray(readData); 
      var newData = new Array(); 
      var ignore = false; 
      //document.write("<p>" + readData + "</p>"); 
      var i = 0; 
      //document.write(arrayData); 
      for(x in readData){ 
       if(i > 100000){ 
        break; 
       } 
       i++; 
       if(readData[x]=== '<'){ 
        ignore = true; 
       } 
       else if(readData[x] === '>'){ 
        ignore = false; 
       } 
       else if(readData[x]==='"'){ 
        if(ignore){ 
         newData[x] = ""; 
        } 
        else{ 
         newData[x] = "&quot;"; 
        } 
       } 
       else{ 
        if(ignore){ 
         newData[x] = ""; 
        } 
        else{ 
         newData[x] = readData[x]; 
        } 
       } 
      } 
      i = 0; 
      for(x in newData){ 
       document.write(newData[x]); 
       i++; 
      } 
      document.write("<p>"+i+"</p>"); 
     }; 
     function callWikipediaAPI(wikipediaPage) { 
      $.getJSON('http://en.wikipedia.org/w/api.php?action=parse&format=json&callback=?', {page:wikipediaPage, prop:'text|images', uselang:'en'}, wikipediaHTMLResult); 
     } 
     callWikipediaAPI('Gregg Hartsuff'); 


     $("a").addClass("test"); 
     $(document).ready(function(){ 
      $("a").click(function(event){ 
       event.preventDefault(); 
       $(this).hide("slow"); 
      }); 
     }); 
     document.write("<p>Script is running</p>"); 
    </script> 

</body> 

+0

你有一個正在運行的例子嗎? – kamaci

+0

你有沒有firebugged這看到請求正在作出並正在返回響應? – stevebot

+0

我該怎麼做?我從來沒有用過螢火蟲。 – Ian

回答

0

這可能會幫助,我很感興趣,看到API將返回什麼,所以我掀起了一個簡單的例子。你可以在這裏看到小提琴:http://jsfiddle.net/neilheinrich/ZPNxv/

此外,你一定要看看Firebug,因爲它可以幫助你更容易地進行調試。您可以直接從螢火蟲運行請求(並查看它返回的內容)。

var url = "http://en.wikipedia.org/w/api.php?action=parse&format=json&callback=?"; 
var page = "baseball" 

$.getJSON(url, { 
    page: page, 
    prop:"text|images", 
    uselang:"en" 
}, function(data) { 
    var $container = $("body") 

    // append title 
    $container.append(data['parse']['title']); 

    // append page text 
    $container.append(data['parse']['text']['*']);  

    // append images 
    var images = data['parse']['images']; 
    $.each(images, function(i, src){ 
    // note: the path of these images is somewhat obscured 
    // filenames are all that is supplied (no path) 
    $container.append(src) 
    }) 
}) 
0

是的! 我也看到了這一點,並發現網上絕對沒有關於它。 我正在使用php返回JSOn結果,發現使用header()改變'Content-Type'有幫助,但奇怪的是,並非每次我都說95%的時間。

另外,還要確保您的JSON是有效的,如果有疑問,複製並粘貼響應到這裏jQuery的螢火,根本不算什麼呢,否則: http://jsonformatter.curiousconcept.com/

希望幫助