URLが file://.../ の場合xhr.statusが0を返す

これいつもハマる。
少なくともFirefoxではそうだけど他ではどうなんだろう。

注意: file:/// および ftp:// は HTTP ステータスを返しません。そのため、status についてはゼロが、statusText については空文字列を返されます。詳しくは bug 331610 を参照してください。

XMLHttpRequest - Web API インターフェイス | MDN