为什么说Ajax会毁了站点?

我在IBM的网站上读到了关于Ajax的文章,上面写的是:

If the application fails to communicate, it might leave users unsure about what is actually happening. If they click a Form Submit button and nothing happens, they might assume the Web site is broken. If the application fails to communicate that an error occurred, users generally assume that their action succeeded. This assumption can lead to extreme frustration if the reality is that the action did not succeed, especially if a user has just spent a long time working on the content of the form. If the application informs users when there is an error or timeout, at least the user has an opportunity to copy and paste the data and save it locally, thus avoiding one of the worst possible user experiences.(如果应用程序无法进行通信,可能会使用户不确定实际发生了什么。如果他们单击表单提交按钮而什么也没有发生,他们可能会假设网站被破坏了。如果应用程序无法通信错误发生,用户通常假定他们的操作成功。如果实际情况是操作没有成功,特别是当用户花了很长时间处理表单的内容时,这种假设可能会导致极大的挫折感。如果应用程序在出现错误或超时时通知用户,则至少用户有机会复制和粘贴数据并在本地保存数据,从而避免了最糟糕的用户体验之一。)

现在,在使用JavaScript或HTML时也会出现这个问题。为什么作者称Ajax会毁了站点?

Because you can be more sure that your local JavaScript code will get executed as you intended. However, as Ajax may be affected by network congestion and other external problems, you can not be as sure. Unless proper precautions are taken (like checking for a timeout), certain functions might not be called at all, leaving the user confused.

It's dangerous because when using AJAX to process form submissions, you are changing the usual user experience. When a user clicks on the submit button, you are in charge of informing them that something is actually happening (Placing a loading gif for example)

If the request fails, it's also your responsibility to inform the user that it failed, and perhaps offer a solution and information. If you don't, the user will be clueless as to what happened, they won't know if their form submission really did something, if the information they sent has been saved... etc

AJAX is "dangerous" because it completely relies on the developer to work fine.

If the network connection is lost for example, the AJAX request will fail and many developers forget to use a timer to check for this kind of thing, thus the user will be left alone wondering what actually happened. If the request did make it to the server, but the answer didn't return, the action might have been done (e.g. registering a new user), but the user won't know.

Static javascript code should have the same outcome everytime it is executed (this really depends on the code, but we're talking about general/simple javascripts). AJAX on the other hand is always subject to external factors affecting it's execution (internet connectivity problems / timeouts / server load, etc). I have seen many AJAX scripts not handling timeouts or failed connection/reading attempts leaving the "loading bar" (if there is one) hanging