jQuery ajax返回数据:json和html混合?

我有这个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:意外字符

那么我怎样才能使这个代码变得多才多艺呢?

我不确定是否有更好的方法,但你可以试试……赶上

 $.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 } } }); 

从本质上讲,您的代码是完全错误的 – 如果返回类型可能以不一致的方式变化,则您的服务器端API违反了所有可预测性原则。 您的代码永远不必猜测返回数据的类型。

话虽如此,如果您不想修复它, 一个简单的try / catch将有助于解决不稳定的行为。 IE浏览器。

 try { if ($.parseJSON(returndata) === false) A; } catch(e) { // Treat as HTML here. } 

它并不漂亮,但这就是你得到一个不可预测的API而不是开始的结果。

可能你需要像这样处理它

 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作为exception

REF: 如何检查值是否为json对象?

编辑:编辑使代码更精确地解决方案