看看
this JsFiddle:
var requests = [ $.ajax("http://search.twitter.com/search.json",{ data: { q: 'ashishnjain' },dataType: 'jsonp' }) .done(function() {console.log("request");}),$.ajax("http://search.twitter.com/search.json",dataType: 'jsonp' }) .done(function() {console.log("request");}) ]; $.when(requests).done(console.log("alldone"));
预期的输出是:请求请求alldone,但实际上这打印了alldone请求请求.
在这段代码中实际上有两个错误(如果你喜欢那种东西,那么它就是一个练习),但最终我认为这是因为当给出的参数没有任何意义时,JavaScript和jQuery都非常宽松.在这种环境中,“正确”的东西似乎是“做某事或什么也不做,只是不要抛出错误!”.
看到这段代码通过JsLint,并且花了我几个小时进行调试(真正的代码当然要复杂几个数量级),我想知道我还能做些什么来减少浪费时间这样的无根据宽大.这不是一个孤立的例子;它似乎一遍又一遍地发生.有什么建议?
解决方法
它实际上可以在Javascript中运行时为
check types,这只是严格不是Javascript中的首选样式. JS黑客喜欢把它挂掉.
其他黑客虽然应对这种情况,对吧?因此,我建议您调查其他方法来减少调试工作,而不是长时间地将语言或jQuery归咎于调试此问题.
以下是我能想到的一些建议:
>首先在交互式JS控制台中测试一小段代码,然后再粘贴到.js文件中:这个
>允许你快速迭代直到你做对了(你如何使用$.when()?)
>确保当您做对了,您就会明白如何使用API
>继续学习JS,并继续写更多.你做的第二个错误:没有在函数中包装console.log(“all done”)表明关于JS的基本概念还没有完全锁定到位 – 一个经验丰富的JS黑客永远不会犯这个错误.