Когда вы загружаете файл как изображение , браузер декодирует кодировку ".png", чтобы подготовить изображение для отображения. Он не вызывает ваш обработчик «load», пока не узнает, что это хорошее изображение. Во втором случае вы просто извлекаете данные, поэтому браузеру все равно, является ли это действительный файл «.png» или нет.
В любом случае, это моя ставка. Я уверен, что если вы загрузите файл случайных данных (не изображение) первым способом, ваш обработчик «загрузки» никогда не будет вызван.
edit Что ж, "ошибка" в исходном вопросе делает спекуляции, стоящие за этим ответом, в основном бесполезными. (Первоначальный вопрос гласил, что второй & mdash; ajax & mdash; был быстрее , чем загрузка через вновь созданное изображение.)