Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从外部URL获取JSON数据,并将其以纯文本形式显示在div中_Javascript_Html_Json - Fatal编程技术网

Javascript 从外部URL获取JSON数据,并将其以纯文本形式显示在div中

Javascript 从外部URL获取JSON数据,并将其以纯文本形式显示在div中,javascript,html,json,Javascript,Html,Json,我有一个类似于的外部资源,它返回一个JSON。我想在html中的div中显示result key的值(假设div的名称为“summary”)。结果键的值也应以纯文本显示。 URL返回json: {“结果”:“鲍勃·迪伦,出生于罗伯特·艾伦·齐默尔曼,是美国人 歌手、词曲作者、作家、诗人和画家,曾是一名专业歌手 在流行音乐中的角色已经有五十年了。这是迪伦最伟大的作品之一 著名的工作始于20世纪60年代,当时他成为了一名……“} JSON只有结果键,没有其他键 基本上,我不想使用纯HTML和Java

我有一个类似于的外部资源,它返回一个JSON。我想在html中的div中显示result key的值(假设div的名称为“summary”)。结果键的值也应以纯文本显示。
URL返回json:

{“结果”:“鲍勃·迪伦,出生于罗伯特·艾伦·齐默尔曼,是美国人 歌手、词曲作者、作家、诗人和画家,曾是一名专业歌手 在流行音乐中的角色已经有五十年了。这是迪伦最伟大的作品之一 著名的工作始于20世纪60年代,当时他成为了一名……“}

JSON只有结果键,没有其他键

基本上,我不想使用纯HTML和JavaScript以外的任何东西。我是JavaScript的相对初学者,因此我要求提供注释代码。

因为它是一个外部资源,所以您需要使用JSONP,因为 为此,您需要添加querystring参数
callback

$.getJSON("http://myjsonsource?callback=?", function(data) {
    // Get the element with id summary and set the inner text to the result.
    $('#summary').text(data.result);
});

由于所需页面将从不同的域调用,因此需要返回jsonp,而不是json

$.get("http://theSource", {callback : "?" }, "jsonp",  function(data) {
    $('#summary').text(data.result);
});

使用JSONP可以这样做:

function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'http://url.to.json?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function CallURL()  {
    $.ajax({
        url: 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan',
        type: "GET",
        dataType: "jsonp",
        async: false,
        success: function(msg)  {
            JsonpCallback(msg);
        },
        error: function()  {
            ErrorFunction();
        }
    });
}

function JsonpCallback(json)  {
    document.getElementById('summary').innerHTML = json.result;
}
var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};
getJSON('https://www.googleapis.com/freebase/v1/text/en/bob_dylan', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    alert('Your Json result is:  ' + data.result);
    result.innerText = data.result;
  }
});
但源代码必须知道,您希望它调用作为回调参数传递给它的函数

使用google API时,它将如下所示:

function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'http://url.to.json?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function CallURL()  {
    $.ajax({
        url: 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan',
        type: "GET",
        dataType: "jsonp",
        async: false,
        success: function(msg)  {
            JsonpCallback(msg);
        },
        error: function()  {
            ErrorFunction();
        }
    });
}

function JsonpCallback(json)  {
    document.getElementById('summary').innerHTML = json.result;
}
var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};
getJSON('https://www.googleapis.com/freebase/v1/text/en/bob_dylan', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    alert('Your Json result is:  ' + data.result);
    result.innerText = data.result;
  }
});
检查向google api传递回调时数据的外观:


下面是对JSONP的一个很好的解释:

您可以使用$.ajax调用获取值,然后将其放入您想要的div中。您必须知道的一点是,您无法接收JSON数据。您必须使用JSONP

代码如下所示:

function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'http://url.to.json?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function CallURL()  {
    $.ajax({
        url: 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan',
        type: "GET",
        dataType: "jsonp",
        async: false,
        success: function(msg)  {
            JsonpCallback(msg);
        },
        error: function()  {
            ErrorFunction();
        }
    });
}

function JsonpCallback(json)  {
    document.getElementById('summary').innerHTML = json.result;
}
var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};
getJSON('https://www.googleapis.com/freebase/v1/text/en/bob_dylan', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    alert('Your Json result is:  ' + data.result);
    result.innerText = data.result;
  }
});

这里是一个没有使用JQuery和纯JavaScript的例子。我使用了javascript承诺和XMLHttpRequest 你可以试试这个

HTML


如果您想使用普通javascript,但避免承诺,可以使用Rami Sarieddine的解决方案,但用如下回调函数替换承诺:

function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'http://url.to.json?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function CallURL()  {
    $.ajax({
        url: 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan',
        type: "GET",
        dataType: "jsonp",
        async: false,
        success: function(msg)  {
            JsonpCallback(msg);
        },
        error: function()  {
            ErrorFunction();
        }
    });
}

function JsonpCallback(json)  {
    document.getElementById('summary').innerHTML = json.result;
}
var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};
getJSON('https://www.googleapis.com/freebase/v1/text/en/bob_dylan', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    alert('Your Json result is:  ' + data.result);
    result.innerText = data.result;
  }
});
你会这样称呼它:

function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'http://url.to.json?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function insertReply(content) {
    document.getElementById('output').innerHTML = content;
}

// create script element
var script = document.createElement('script');
// assing src with callback name
script.src = 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan?callback=insertReply';
// insert script to document and load content
document.body.appendChild(script);
function CallURL()  {
    $.ajax({
        url: 'https://www.googleapis.com/freebase/v1/text/en/bob_dylan',
        type: "GET",
        dataType: "jsonp",
        async: false,
        success: function(msg)  {
            JsonpCallback(msg);
        },
        error: function()  {
            ErrorFunction();
        }
    });
}

function JsonpCallback(json)  {
    document.getElementById('summary').innerHTML = json.result;
}
var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
};
getJSON('https://www.googleapis.com/freebase/v1/text/en/bob_dylan', function(err, data) {
  if (err != null) {
    alert('Something went wrong: ' + err);
  } else {
    alert('Your Json result is:  ' + data.result);
    result.innerText = data.result;
  }
});

使用Robin Hartman代码显示Json数据。您需要添加以下行

他给你的密码给了你一个,一个。这段代码以更好的方式检索数据

result.innerText =JSON.stringify(data);

这是一个相当基本的HTML/AJAX问题。到目前为止你有什么代码?你被卡在哪里了?以下是针对AJAX的jQuery文档,它们专门针对JSON数据执行
GET
:-您可能会遇到的问题是同一来源策略,因为您将针对不同于脚本运行的域执行AJAX请求。它将显示在div中,但将要创建的JSON对象要求“纯HTML和JavaScript”较旧的浏览器不支持Promise。在最新版本的Chrome中,“then”函数的第一部分起作用,如果url正确,我会得到结果。但是,如果url不正确,我从未收到“出错”警报。也许这与Fiddler的工作原理有关?承诺在任何版本的Internet Explorer中都不受支持,您也不需要承诺来实现简单的HTTP请求……没错,但现在Edge是支持承诺的新浏览器。您可能不需要承诺,但这是执行异步JS的新标准方式,所以为什么不编写整洁的脚本?@Abderrahim很抱歉,找不到该页面。你删除了这个问题吗?我在Chrome中得到了一个“No”Access Control Allow Origin“header”错误。不是为我工作,你是对的。仅当服务器声明“Access Control Allow Origin”头并允许其他人访问其资源时,此操作才有效。否则,您将不得不使用JSONP(如果服务器支持的话)或CORS代理服务器,它将下载数据并为您设置标题。他说,“我想在html中的div中显示结果键的值”,这正是my和Rami Sarieddine的代码所做的。您的代码将显示整个数据,这不是他想要的。