getJSON ничего не возвращает в расширении firefox

Я пытаюсь написать расширение Firefox, используя jquery для получения данных из API Википедии. Я вызываю getJSON следующим образом:

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>


person Ian    schedule 29.10.2011    source источник
comment
У вас есть работающий пример?   -  person kamaci    schedule 29.10.2011
comment
Вы проверили это, чтобы увидеть, что запрос выполняется и возвращает ответ?   -  person stevebot    schedule 29.10.2011
comment
Как бы я это сделал? Я никогда не использовал firebug.   -  person Ian    schedule 29.10.2011
comment
@Ian firebug — это расширение для Firebug. Вы можете загрузить в свой Firefox. Вы можете проверять элементы, отслеживать свою сеть и отлаживать коды JavaScript.   -  person kamaci    schedule 29.10.2011


Ответы (2)


Это может помочь, мне было интересно посмотреть, что вернет API, поэтому я сделал быстрый пример. Вы можете увидеть скрипку здесь: http://jsfiddle.net/neilheinrich/ZPNxv/

Кроме того, вам обязательно следует заглянуть в Firebug, так как это значительно упростит отладку. Вы можете просто запустить запрос прямо из 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)
  })
})
person nheinrich    schedule 29.10.2011

ДА! Я тоже видел это и ничего не нашел в Интернете об этом. Я использовал php для возврата результатов JSOn и обнаружил, что изменение «Content-Type» с помощью header() помогло, но, как ни странно, не каждый раз, я бы сказал, в 95% случаев.

Также убедитесь, что ваш JSON действителен, скопируйте и вставьте ответ сюда, если сомневаетесь, поскольку jQuery Firebug просто ничего не делает в противном случае: http://jsonformatter.curiousconcept.com/

надеюсь, это поможет

person Alex    schedule 29.10.2011