javascript - 如何执行带有错误响应的 JSON api 调用?

标签 javascript json api

我使用 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/

相关文章:

java - Spring Boot API 错误地重复 SQL 数据

javascript - 如何更改 Ionic 2 中后退按钮的标签?

javascript - IE 中的第 n 个子选择器替换

javascript - 检查 JSON 对象中是否存在日期

c++ - json 到 C++ 结构

java - 从 API 返回响应并在 API 级别执行一些其他操作

javascript - 需要一段代码在javascript中从一数到十

javascript - 异步:return from functions in waterfall method

java - 如何在Java中动态添加到JSON对象中的嵌套元素?

spring - 在处理 RESTful 请求时处理转义的 url