异想天开

What's the true meaning of light, Could you tell me why

一次前端调试

日期:2014-04-30 18:06:42
  
最后更新日期:2014-04-30 18:08:00
上周搭建了nginx+nginx-upload-module+nginx-upload-progress-module来上传大文件。接到任务时,当时我考察了几种上传文件的方法,前端大概都是用multipart/form-data格式提交表单的方法,表单内有个type为file的input框,后端有常见的动态语言如php以及其他如java来实现方法,也有用nginx模块,假如是用nginx作为服务器的话。比较一下,选择了用nginx+模块的做法。当时同事说这两个模块不兼容新版本的nginx,幸好之前内网有个大概能用的环境。花了一些精力来调试js代码,还是能够跑的。后来我在虚拟机里面测试了nginx 1.4.4,后来发现这两个模块的作者几个月前,已经对新版本的nginx做了兼容,编译过了,那天粗略测试新版本过了。今天改写了页面,重新测试时老是不正确。对于在大多数情况下,不写js代码的人,这多少让人发慌。 [code lang="cpp"]
$.ajax({
url : url1,
cache : false,
async : false,
type : "GET",
dataType :'json',
success : function (result){
alert("hello world");
alert(result.state);
if(result.state=="done")
{
window.done=1;
}
},
/*error : function(XMLHttpRequest, textStatus, errorT
alert("请求失败!");
alert(errorThrown);
alert(textStatus);
done=2;
}*/
});
[/code]
开始的是时候,直接找抄网上的jquery的一个同步调用的例子,没有error部分。done开始状态为0,但后面done的状态一直没变化。先后怀疑是不是变量与内部某些东西冲突了,前面js代码内部实现不正确。闷了一下,想起可以尝试用firefox+firebug来调试js代码。发现success部分没有执行,又在网上搜另外一个jquery同步调用的例子,加上error部分。然后显示的信息是:
[code lang="cpp"]
SyntaxError:JSON parse:unexpected character
[/code]
于是查看返回的data部分,返回为:
[code lang="cpp"]
({ "state" : "starting" });
[/code]
去github项目主页上看了下,发现这种是该模块的默认输出,上面描述是“like json output, but with callback”。后来在nginx upload process模块里面加个配置:
[code lang="cpp"]
upload_progress_json_output ;
[/code]
输出pure json格式。问题是解决了,但总想找一种类似方法论的东西。而这方法论也许只是一种编程感悟。