我使用 Javascript 通过 JSON API 调用检索粘贴到特定过滤器中的事件产品的数量。 我的典型 react 是
{"total":34,"product_ids":["PRODUCT1","PRODUCT2",....."]}
当产品存在时,我的脚本工作正常,但当没有产品处于事件状态时,响应将是:
{"error":"No products found, please check request settings"}
在这种情况下,脚本将会崩溃。
我尝试做的是将 var NumEdPicks
设置为 0
当我收到错误时,但我真的不知道如何,因为脚本崩溃时找不到“总计”。
这就是脚本的检索部分的样子
// Retrieve
var url = 'http://api.jetlore.com/products/products_by_filter.json?jl_cid=' + clientID + '&filter=' + filterName + '&per_page=' + maxCount + '&page=1';
var response = HTTP.Get(url);
var responseObj = Platform.Function.ParseJSON(response["Content"]);
var NumEditorsPick = responseObj.total;
if(NumEditorsPick>maxCount){ var NumEditorsPick = maxCount;}
当我收到错误响应时,我想将 NumEditorsPick
设置为 0。
我正在考虑但不起作用的一些事情:
var NumEditorsPick = responseObj.total || 0
或
var NumEditorsPick = ‘total’ in responseObj ? responseObj.total : 0
没有总计时如何定义NumEditorsPick
?
到目前为止我已经尝试过:
if (responseObj.hasOwnProperty('total')){
var NumEditorsPick = responseObj.total;
}else{
var NumEditorsPick = 0;
}
还有
if (responseObj.has("total")){var NumEditorsPick = responseObj.total;
}
if (responseObj.has("error")){var NumEditorsPick = 0;
}
两者都会使我的脚本的执行崩溃,所以我开始认为,当出现错误响应时,它只是停止脚本并忽略其余部分,这可能吗?那么,如何忽略这个错误响应呢?
编辑: 按照评论中的建议使用 try/catch 方法后,我终于成功了:
var NumEditorsPick;
try {
var response = HTTP.Get(url);
var responseObj = Platform.Function.ParseJSON(response["Content"]);
NumEditorsPick = responseObj.total;
} catch (error) {
NumEditorsPick = 0;
}
最佳答案
您可以使用Javascript的hasOwnProperty()检查解析 JSON 是否具有您要查找的 key 。
在这种情况下,我会是这样的:
var responseObj = Platform.Function.ParseJSON(response["Content"]);
if (responseObj.hasOwnProperty('error')){
// handle error msg
}else{
// do something else
}
Here's a simple example使用您提供的 JSON 输入。
<小时/>更新
好的,所以我最初的答案是基于您在这里所说的:
My script is working fine when products are present but when none of the products are active the response will be:
{"error":"No products found, please check request settings"}
但是您调用的服务不会返回包含错误的 JSON 字符串。相反,它会返回 404,因此任何解析或使用响应内容的尝试都是无效的。
因此,首先,您可以尝试将 HTTP.Get(url)
包装在 try/catch 方法中,并在 catch 子句中将 NumEdPicks
设置为零。
另一种选择是检查 HTTP.Get()
方法文档以查看响应对象是否具有状态(例如:response.Status
),或者是否可以传递响应和错误的回调函数,如 AJAX 中的示例:
$.ajax({
url: 'yourUrl',
type: 'GET',
success: function(data){
// Set NumEdPicks to total and do other stuff
},
error: function(data) {
// Set NumEdPicks to zero
}
});
关于javascript - 如何执行带有错误响应的 JSON api 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896391/