Примечание: я тестировал это только в Chrome.
добавляет функцию прототипа в XMLHttpRequest .. XHR2,
в XHR 1, вам, вероятно, просто нужно заменить this.response
с this.responseText
Object.defineProperty(XMLHttpRequest.prototype,'responseJSON',{value:function(){
return JSON.parse(this.response);
},writable:false,enumerable:false});
, чтобы вернуть json в xhr2
xhr.onload=function(){
console.log(this.responseJSON());
}
EDIT
Если вы планируете использовать XHR с arraybuffer
или другие типы ответов, тогда вы должны проверить, является ли ответ string
.
в любом случае вам нужно добавить дополнительные проверки, например если он не может разобрать json.
Object.defineProperty(XMLHttpRequest.prototype,'responseJSON',{value:function(){
return (typeof this.response==='string'?JSON.parse(this.response):this.response);
},writable:false,enumerable:false});