我有这个ajax请求来从我的服务器获取数据,默认情况下dataType
总是html
。但有时它会从服务器返回json,所以我想检查返回的数据是否为html然后执行A else执行B.是否可能?
我的jquery,
$.ajax({
type: "GET",
dataType: "html",
url: request_url,
context: $('#meat'),
async: true,
beforeSend: function () {},
success: function (returndata, status, jqXHR) {
if ($.parseJSON(returndata) === false) A;
else B.
}
});
当返回的数据为html
,
SyntaxError:JSON.parse:意外字符
那我怎样才能使这段代码多才多艺??
答案 0 :(得分:6)
我不确定是否有更好的方法,但你可以试试......赶上
$.ajax({
type: "GET",
url: request_url,
context: $('#meat'),
async: true,
beforeSend: function() {
},
success: function (returndata, status, jqXHR) {
var parsed;
try
{
parsed = $.parseJSON(returndata);
// Execute B
}
catch(e)
{
// treat as html then
// do parsing here
parsed = returnData;
// Execute A
}
}
});
答案 1 :(得分:4)
基本上,您的代码完全错误 - 如果返回类型可能以不一致的方式变化,则您的服务器端API违反了所有可预测性原则。您的代码永远不必猜测返回数据的类型。
话虽如此,a simple try/catch如果您不想修复它,将有助于解决不稳定的行为。即
try {
if ($.parseJSON(returndata) === false) A;
} catch(e) {
// Treat as HTML here.
}
它并不漂亮,但这就是你得到一个不可预测的API而不是开始的原因。
答案 2 :(得分:-1)
可能你需要像这样处理它
try{
var response=jQuery.parseJSON('response from server');
if(typeof response =='object')
{
//control would reach this point if the data is returned as json
}
else
{
//control would reach this point if data is plain text
if(response ===false)
{
//the response was a string "false", parseJSON will convert it to boolean false
}
else
{
//the response was something else
}
}
}
catch(exp){
//controls reaches here, if the data is html
}
由于您还需要检查html数据,您可能需要注意这一点,
如果parseJSON可能会处理除JSON值以外的其他内容(即HTML)
,也可能需要使用try / catch作为异常<强> REF: 强> How can I check if a value is a json object?
编辑:编辑以使代码更精确地针对解决方案