如何获得$ .getJSON来处理JSONP

时间:2016-02-08 21:20:15

标签: javascript jquery json ajax jsonp

我知道它看起来很多,但我的问题涉及一行(粗体)代码。我知道我的事件处理程序设置正确。我知道我的网址应该是什么,除了?callback =?部分(我在另一篇文章中读到,通过将其放在传递给$ .getJSON的url的末尾,getJSON变得能够使用JSONP,并且根据他们的API页面wiki使用JSONP)。我也确定domMod功能永远不会运行,而不是第一线。所以不要担心我的代码的其他部分,如果你能告诉我为什么我的$ .getJSON没有调用函数,我就是新手。我收到的错误消息是

  

wikiViewer.html:1拒绝执行脚本   '?https://en.wikipedia.org/w/api.php?format=json&action=query&generator=searc ... =约旦回调= jQuery111107644474213011563_1454965359373&安培; _ = 1454965359374'   因为它的MIME类型('application / json')不可执行,而且   启用了严格的MIME类型检查。

(function(){
var searchBtn = document.getElementById('search');
//var body = document.getElementsByTagName('body')[0];
var input = document.getElementById("input");
var bodyDiv = document.getElementById('bodyDiv')
$(document).ready(function(){
  searchBtn.addEventListener('click', searchWiki);
  function searchWiki(){
    bodyDiv.innerHTML = "";
    var url = 'https:\/\/en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch='
    if (input.value === ""){
        return;
    }
    var searchTerm = input.value.replace(/\s/g, '%20');
    url = url + searchTerm + "?callback=?";
    **$.getJSON(url, domMod)**  //change fileName to be whatever we wish to search
      function domMod(json){ //what to do with dom based on json file  NOTE WE NEED TO FIRST CHECK ANDREMOVE PREVIOUS SEARCH CONTENT
        var entry;
        if (!json.hasOwnProperty(query)){
            return;
        }
        if (!json.query.hasOwnProperty(pages)){
            return;
        }
        json = json.query.pages;
        var keys = Object.keys(json);
        var keysLength = keys.length;
        for (var i = 0; i < keysLength; i++){ 
            entry = json[keys[i]];
            var outterDiv = document.createElement('div');
            outterDiv.className = "entry";
            var imageDiv = document.createElement('div');
            imageDiv.className = "entryImg";
            var entryDiv = document.createElement('div');
            entryDiv.className = "entryTxt";
            outterDiv.appendChild(imageDiv);
            outterDiv.appendChild(entryDiv);
            entryDiv.innerHTML = '<h2>' + entry.title + '</h2>' + '<p>' + entry.extract + '</p>'
        if (entry.hasOwnProperty('thumbnail')){ //add image to our imageDiv child of entryDiv
            imageDiv.style.backgroundImage = "url('" + entry.thumbnail.source + "')"
        }
        bodyDiv.appendChild(outterDiv); //appendChild to the Body 
    }
   }
 } 

  });
}())

1 个答案:

答案 0 :(得分:0)

您已使用?在网址中启动了查询字符串,但在执行此操作时添加了另一个?

url = url + searchTerm + "?callback=?";

更改为

url = url + searchTerm + "&callback=?";

当我发送术语“食物”时工作正常

DEMO