如何在 Javascript 中解析 JSONp 响应
Posted
技术标签:
【中文标题】如何在 Javascript 中解析 JSONp 响应【英文标题】:How do I parse JSONp response in Javascript 【发布时间】:2018-11-18 05:52:24 【问题描述】:我是 javascript 的新手,我正在尝试从另一个网站的外部 API 中获取数据,对其进行解析并在我的 html 页面中显示它的块。目前,一切正常,除了我试图从 JSONp 响应中获取信息以更新 HTML 显示。
我正在使用的 JavaScript 代码:
//Fetch method grabs information from "myURL"
fetch("https://exampleURL.com",
mode: 'cors'
)
.then(function(response)
if (response.ok) //Checking if response is returned correctly
var res = response; //Storing response in a variable
jQuery000000000000000_0000000000(res); //Sending response parsing function
);
//Parsing function reads the 'title' data from the JSONp response
function jQuery000000000000000_0000000000(res)
document.getElementById('title').innerHTML = res[0].title; //Error occurs here
我应该从外部 API 获得 JSONp 响应:
jQuery000000000000000_0000000000(["isSuffix":false,"name":"name","title":"Mr"]);
每当我运行此代码时,我都会在控制台中收到“Uncaught (in promise) TypeError: Cannot read property 'title' of undefined”错误,引用上面代码中的 innerHTML 行。
任何指针将不胜感激! :)
[编辑] 根据我从其他在线答案中读到的内容,我认为创建一个与响应中的函数同名的函数是合适的(jQuery000000000000000_0000000000(res);)。我不确定这是否正确。
响应来自外部网站。谢谢!
【问题讨论】:
你的html页面是什么?好像里面没有“title” @IStepashka Na... 不是 HTML 页面,它是res
对象。你不明白发生了什么。
杰西,如果我的回答对你有用,请点击勾选按钮接受。
【参考方案1】:
在这种情况下,它是一个 JSONP 请求。您只需要在需要时调用<script>
文件即可。
<script src="/path/to/jsonp.js"></script>
脚本是可执行的。所以你不需要使用 AJAX 或任何方式来调用它。看看,你是如何发送你的res
的?你做错了。这是因为您在响应中已经有正确的调用:
jQuery000000000000000_0000000000(["isSuffix":false,"name":"name","title":"Mr"]);
上面的代码只需要执行即可。不要使用fetch()
。
你的完整代码应该是:
<script>
//Parsing function reads the 'title' data from the JSONp response
function jQuery000000000000000_0000000000(res)
document.getElementById('title').innerHTML = res[0].title; //Error occurs here
</script>
<script src="/path/to/jsonp.js"></script>
执行上述内部脚本的另一种方法是使用:
//Parsing function reads the 'title' data from the JSONp response
function jQuery000000000000000_0000000000(res)
document.getElementById('title').innerHTML = res[0].title; //Error occurs here
$.getScript("/path/to/jsonp.js");
上面文件中的内容会自动调用jQuery000000000000000_0000000000(res)
函数,参数有效。 :)
详细说明
在您当前的代码中,发生的情况是,您对 JSONP 请求进行了 AJAX 调用,这是您不应该做的,它使您的代码变成了这种方式:
jQuery000000000000000_0000000000("jQuery000000000000000_0000000000(["isSuffix":false,"name":"name","title":"Mr"])");
当它试图访问第一个元素的标题属性时,它是一个字符串,在这里,它将是undefined
。因为,字符串不会有title属性。
这是堆栈:
jQuery000000000000000_0000000000(jQuery000000000000000_0000000000(["isSuffix":false,"name":"name","title":"Mr"]));
res = jQuery000000000000000_0000000000(["isSuffix":false,"name":"name","title":"Mr"]);
res[0] = undefined;
res[0].title = TypeError;
这就是你变得不确定的原因...:)
【讨论】:
很抱歉,我没有提到我的代码从外部源获取 JSONp,所以我在本地没有调用函数。我已经编辑了我的问题。道歉! @Jesse 你能解释一下这里的全部代码吗? 我的 fetch 函数几乎从这里 (services.runescape.com/m=website-data/…) 获取 API,它返回问题中描述的 JSONp 响应。然后我希望解析我对 HTML id 的响应。提取工作正如我的控制台告诉我的那样,innerhtml 代码也可以工作,但是我不确定如何正确实现我的响应以从响应中传递“标题”值。非常感谢! @Jesse 如果你能展示整个代码,我可以尝试解决它并帮助你。 我已经上传到这里了:pastebin.com/wZJSmF8u。再次感谢您的帮助!以上是关于如何在 Javascript 中解析 JSONp 响应的主要内容,如果未能解决你的问题,请参考以下文章
存在 4xx 或 5xx Http 错误代码时在 Javascript 中解析 JSONP 响应