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对象?
编辑:编辑使代码更精确地解决方案