JSON/JSONP JavaScript 的问题
JSON/JSONP problems with JavaScript
我是 JSON/JSONP 的新手,我 运行 遇到了一些问题并且对此有一些疑问。
基本上我需要从中获取一些 JSON 数据:
https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getLivsmedel
你应该搜索一些食物(比如培根),然后你会得到一些关于它的信息,这些信息显示在 table 中,如下所示:https://jsfiddle.net/4gt10u2p/1/
所以我从创建一个脚本元素开始,然后像这样将它附加到正文中:
var script = document.createElement('script');
var scriptSrc = script.src = *link above*
document.querySelector('body').appendChild(script);
var tableBody = document.querySelector("tbody");
接着是一个函数,我收集数组数据并用行、单元格等格式化我的 table
function getLivsmedel(data) {
for (var i = 0; i < data.livsmedel.length; i++) {
/* some stuff going on here */
}
这什么都不做,你得到的只是一个空数组。为了让它工作,我必须向 link 添加一个参数,就像培根一样,你在末尾添加“&namn=bacon”。因此,如果我将 src 更改为此:
https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getlivsmedel&namn=bacon
然后一切都很好,所有培根信息都在我的 table 中排列,就像我想要的那样。
但我显然希望这是一个动态解决方案,以便参数更改为用户在搜索字段中写入的任何内容。我该怎么做?我试图获取搜索字段的值并将其添加到 link,但无法真正发挥作用。
此外,另一个问题是当页面加载时该函数立即执行,这是为什么?我希望它 运行 当你按下搜索按钮时,使用事件监听器或类似的。
使用 javaScript 执行此操作,不使用 jquery 等
我们首先需要的是当您按下按钮时的提交处理程序:
function submit() {
var searchbox = $("input#searchbox").val();
var script = document.createElement('script');
script.src = "https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getlivsmedel&namn=" + searchbox
document.querySelector('body').appendChild(script);
}
所以现在每次您按下提交时,都会为搜索词加载一个新的 JSONP 对象。从这里开始,您需要使回调函数正常工作,例如,每当搜索新类型的食物时,旧的 JSONP 对象和数据将被删除并替换为新的。
Here is an old SO question about JSONP with a full example for a solution
你快要成功了。只需将你的<script>
-adding代码封装在一个函数中,当你点击Search
按钮时调用它:
function doJSONP() {
var script = document.createElement('script');
var scriptSrc = script.src = 'https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getLivsmedel&namn=' + search.value;
document.querySelector('body').appendChild(script);
}
button.addEventListener("click", function() { doJSONP(); });
这假定 search
是您的输入元素( 不是 该元素的加载时间值,正如您目前在 fiddle 中所拥有的那样) , button
是您的按钮元素。
关于您的 fiddle 的一些注释:
- 您需要在 JSFiddle 中执行
window.getLivsmedel = function(data) {
而不是 function getLivsmedel(data) {
,因为 fiddle 的脚本代码不会在全局范围内 运行。 JSONP 要求函数在全局范围内可见。 (这不是普通网页上 JSFiddle 之外的问题。)
- 您的
getLivsmedel
函数似乎不起作用:您的 HTML 中似乎没有 tbody
。然而,这是一个完全不同的问题(并且可能很容易修复)并且与您的 JSONP 问题无关。
这是您的 fiddle 实施了我的更改:https://jsfiddle.net/4gt10u2p/2/
我是 JSON/JSONP 的新手,我 运行 遇到了一些问题并且对此有一些疑问。 基本上我需要从中获取一些 JSON 数据:
https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getLivsmedel
你应该搜索一些食物(比如培根),然后你会得到一些关于它的信息,这些信息显示在 table 中,如下所示:https://jsfiddle.net/4gt10u2p/1/
所以我从创建一个脚本元素开始,然后像这样将它附加到正文中:
var script = document.createElement('script');
var scriptSrc = script.src = *link above*
document.querySelector('body').appendChild(script);
var tableBody = document.querySelector("tbody");
接着是一个函数,我收集数组数据并用行、单元格等格式化我的 table
function getLivsmedel(data) {
for (var i = 0; i < data.livsmedel.length; i++) {
/* some stuff going on here */
}
这什么都不做,你得到的只是一个空数组。为了让它工作,我必须向 link 添加一个参数,就像培根一样,你在末尾添加“&namn=bacon”。因此,如果我将 src 更改为此: https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getlivsmedel&namn=bacon 然后一切都很好,所有培根信息都在我的 table 中排列,就像我想要的那样。
但我显然希望这是一个动态解决方案,以便参数更改为用户在搜索字段中写入的任何内容。我该怎么做?我试图获取搜索字段的值并将其添加到 link,但无法真正发挥作用。
此外,另一个问题是当页面加载时该函数立即执行,这是为什么?我希望它 运行 当你按下搜索按钮时,使用事件监听器或类似的。
使用 javaScript 执行此操作,不使用 jquery 等
我们首先需要的是当您按下按钮时的提交处理程序:
function submit() {
var searchbox = $("input#searchbox").val();
var script = document.createElement('script');
script.src = "https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getlivsmedel&namn=" + searchbox
document.querySelector('body').appendChild(script);
}
所以现在每次您按下提交时,都会为搜索词加载一个新的 JSONP 对象。从这里开始,您需要使回调函数正常工作,例如,每当搜索新类型的食物时,旧的 JSONP 对象和数据将被删除并替换为新的。
Here is an old SO question about JSONP with a full example for a solution
你快要成功了。只需将你的<script>
-adding代码封装在一个函数中,当你点击Search
按钮时调用它:
function doJSONP() {
var script = document.createElement('script');
var scriptSrc = script.src = 'https://webservice.informatik.umu.se/webservice_livsmedel/getlivsmedel.php?callback=getLivsmedel&namn=' + search.value;
document.querySelector('body').appendChild(script);
}
button.addEventListener("click", function() { doJSONP(); });
这假定 search
是您的输入元素( 不是 该元素的加载时间值,正如您目前在 fiddle 中所拥有的那样) , button
是您的按钮元素。
关于您的 fiddle 的一些注释:
- 您需要在 JSFiddle 中执行
window.getLivsmedel = function(data) {
而不是function getLivsmedel(data) {
,因为 fiddle 的脚本代码不会在全局范围内 运行。 JSONP 要求函数在全局范围内可见。 (这不是普通网页上 JSFiddle 之外的问题。) - 您的
getLivsmedel
函数似乎不起作用:您的 HTML 中似乎没有tbody
。然而,这是一个完全不同的问题(并且可能很容易修复)并且与您的 JSONP 问题无关。
这是您的 fiddle 实施了我的更改:https://jsfiddle.net/4gt10u2p/2/