掲題の通りの現象なのですが、
$.ajaxでアクセス自体はstatus 200で返っているのに
errorが呼び出されることがありました。
例だと dataType:'xml'
でアクセスしていることがわかると思います。
レスポンスがjsonの場合は dataType:'json'
と書かないと error: function(data){
の方が呼ばれてしまいます。
でもそもそもjQueryのajaxは今はDeferredな書き方が推奨されてますのでsuccess/errorよりも
$.ajax({ type: 'GET', url: '〜〜〜', dataType: 'json', }).done(function(data) { // success }).fail(function(data) { // error });
と書くのが良いですね。
ちなみに、done/failで書くとdataTypeが違ってもstatus:200であれば
doneが呼ばれるようです。