Javascript 如何使用错误响应进行JSON api调用?
我使用Javascript通过JSON api调用检索粘贴在特定过滤器中的活动产品的数量。 我的电话回复是Javascript 如何使用错误响应进行JSON api调用?,javascript,json,api,Javascript,Json,Api,我使用Javascript通过JSON api调用检索粘贴在特定过滤器中的活动产品的数量。 我的电话回复是 {“总计”:34,“产品ID”:[“产品1”、“产品2”、…”] 当产品存在时,我的脚本工作正常,但当没有任何产品处于活动状态时,响应将为: {“错误”:“未找到任何产品,请检查请求设置”} 在这种情况下,脚本将崩溃 我试图做的是在出现错误时将varNumEdPicks设置为0,但我真的不知道脚本在找不到“total”时是如何崩溃的 这就是脚本的检索部分的外观 //检索 var url
{“总计”:34,“产品ID”:[“产品1”、“产品2”、…”]
当产品存在时,我的脚本工作正常,但当没有任何产品处于活动状态时,响应将为:
{“错误”:“未找到任何产品,请检查请求设置”}
在这种情况下,脚本将崩溃
我试图做的是在出现错误时将varNumEdPicks
设置为0
,但我真的不知道脚本在找不到“total”时是如何崩溃的
这就是脚本的检索部分的外观
//检索
var url='1〕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(响应[“内容]);
var NumEditorsPick=响应bj.total;
如果(NumEditorsPick>maxCount){var NumEditorsPick=maxCount;}
当我得到错误响应时,我想将NumEditorsPick
设置为0。
有些事情我一直在想,但是没有用:
var NumEditorsPick=responseObj.total | | 0
或
var NumEditorsPick='total'在responseObj中?responseObj.total:0
没有总计时如何定义NumEditorsPick
到目前为止,我已经尝试过:
if (responseObj.hasOwnProperty('total')){
var NumEditorsPick = responseObj.total;
}else{
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检查解析JSON是否具有您要查找的密钥
在这种情况下,我会是这样的:
var responseObj = Platform.Function.ParseJSON(response["Content"]);
if (responseObj.hasOwnProperty('error')){
// handle error msg
}else{
// do something else
}
使用您提供的JSON输入
更新 好的,我最初的回答是基于你在这里说的: 我的脚本在有产品的情况下运行良好,但在没有产品的情况下运行良好 产品处于活动状态,响应为:
{“错误”:“未找到任何产品,请检查请求设置”}
但是您调用的服务不会返回包含错误的JSON字符串,而是返回404,因此,任何解析或使用响应内容的尝试都是无效的
因此,首先,您可以尝试在try/catch方法中包装您的HTTP.Get(url)
,并在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是否具有您要查找的密钥
在这种情况下,我会是这样的:
var responseObj = Platform.Function.ParseJSON(response["Content"]);
if (responseObj.hasOwnProperty('error')){
// handle error msg
}else{
// do something else
}
使用您提供的JSON输入
更新 好的,我最初的回答是基于你在这里说的: 我的脚本在有产品的情况下运行良好,但在没有产品的情况下运行良好 产品处于活动状态,响应为:
{“错误”:“未找到任何产品,请检查请求设置”}
但是您调用的服务不会返回包含错误的JSON字符串,而是返回404,因此,任何解析或使用响应内容的尝试都是无效的
因此,首先,您可以尝试在try/catch方法中包装您的HTTP.Get(url)
,并在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
}
});
非常感谢您的回答。我尝试了您想法的几种变体,但不幸的是,当0个产品处于活动状态时(当>0时,它运行得非常好),它仍然会崩溃。请在阅读我的答案后用您尝试过的内容更新您的问题。我用一个工作示例更新了我的答案,希望它能有所帮助:-)嘿,Grazina,非常感谢您在这里帮助我,我更新了我的问题,以显示我迄今为止尝试过的内容。只有在出现错误消息的情况下,它仍然崩溃。我设法在其他地方运行了脚本,我我得到了这个:
{“total”:626,“product_id”:[“100734”,“100900”,“101309”,“101300”,“100979”,“101086”,“100964”,“101175”,“101043”,“101047”]}System.Collections.Generic.Dictionary2[系统.字符串,系统.对象]
仅当存在交易时。当它找不到我正在获得的任何交易时:尝试通过HttpGet调用检索内容时发生异常。URL:[…]远程服务器返回错误:(404)未找到。
它识别错误响应并停止脚本…非常感谢您的回答。我尝试了您的想法的几种变体,但不幸的是,当0个产品处于活动状态时,它仍然崩溃(当>0时,它运行得非常好)。请在阅读我的答案后用您尝试过的内容更新您的问题。我用一个工作示例更新了我的答案,希望它能有所帮助:-)嘿,Grazina,非常感谢您在这里帮助我,我更新了我的问题,以显示我迄今为止尝试过的内容。只有在出现错误消息的情况下,它仍然崩溃。我设法在其他地方运行了脚本,我我得到了这个:{“total”:626,“product_id”:[“100734”,“100900”,“101309”,“101300”,“100979”,“101086”,“100964”,“101175”,“101043”,“101047”]}System.Collections.Generic.Dictionary2[系统.字符串,系统.对象]
只有当