我不断得到错误“字符串不匹配预期的模式”为我的获取请求。我看到一些人有类似的问题在这里和其他论坛,但不能找出问题。
错误的原因是什么?
function showRecipes(){
const ingredients = document.getElementById('ingredients').value.replace(/\s/g, "");
const meal = document.getElementById('meal').value;
const display = document.getElementById('display'); //Where results will go
let url = 'http://www.recipepuppy.com/api/';
url += `?i=${ingredients}&q=${meal}`;
fetch(url, { mode: "no-cors"})
.then(response => {
response.json()
.then(data => {
data.results.forEach(recipe => {
const container = document.createElement('div');
container.setAttribute('class', 'container');
const h1 = document.createElement('h1');
h1.textContent = recipe.title;
const p = document.createElement('p');
p.textContent = recipe.ingredients;
display.appendChild(container);
container.appendChild(h1);
container.appendChild(p);
})
})
.catch(err => {
console.log(err);
})
})
.catch(err => {
console.log('ERROR: ' + err);
})
}
5条答案
按热度按时间xzlaal3s1#
如果服务器的响应是文本,但您试图使用
res.json()
将其解析为JSON,则可能会出现此错误。如果服务器传回文字,则
res.text()
是适当的。在这种情况下Safari曾经给我OP的错误,但Chrome更具体:* “json中位置0处的意外标记W”* --
res.json()
期望字符串的第一个字符是{
或[
,因为JSON就是这样开始的。或者,如Safari所述,“字符串与预期模式不匹配。"
ddrv8njm2#
对于那些接收到这个消息的人,也可能调试他们的代码并发现HTTP响应对象包含的信息与开发人员工具中给出的信息不匹配,这是由
no-cors
造成的问题。删除no-cors
,您就不会有这个问题。juzqafwq3#
如果上面的代码返回
200
的状态,并且res.text()
工作但res.json()
不工作,则这是json格式问题,这可能是编译器没有识别以下内容:/**/
或//
},}
或],}
\t
、\n
建议的json模式为
虽然下面的内容更适合阅读:
此问题在Sublime Text中明显出现
这里有一个解决方案:
GitHub
然后尝试src后跟:
e1xvtsh34#
与this answer相关的async/await更新示例:
2hh7jdfx5#
对于那些从本地或公共文件夹阅读json文件时遇到此错误的人,请确保文件路径前面的前缀正确。如果文件名中没有首字母“/”,它将查找当前目录,可能找不到json文件。因此,请不要使用以下方法:
尝试: