让我们说因为我没有使用闭包而且我不需要多次使用这个函数。
var xhr = null;
function quote() {
try {
xhr = new XMLHttpRequest();
}
catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if (xhr == null) {
alert("Ajax not supported by your browser!");
return;
}
var url = "data.php";
xhr.onreadystatechange = function() {
if ((xhr.readyState == 4) && (xhr.status == 200)) {
var doc = xhr.responseText;
//Parse doc here ?
//Or
//return doc; ?
}
}
xhr.open("GET", url, true);
xhr.send(null);
}
将doc
传递给专用函数进行解析似乎是不必要的,但是我觉得在ajax调用中感到内疚,好像这是一个糟糕的设计决策。
有没有正确的方法去关于这个?
答案 0 :(得分:1)
这可能是一个基于意见的问题,但是除了一般的“保持功能简短,让他们做一件事”的指导原则你似乎已经熟悉之外我没有看到解决它的任何问题(因此你的不安感)。除非解析很大,否则它似乎不会使函数膨胀很多,并且可以认为该函数的一个目的是检索已解析的文档。如果解析超过几行,那么我会将它分开。当然,保持它是分开的使它可以单独测试,这也是有用的。
但是(无关)我肯定会将xhr
变量移动到 quote
函数中,如果这是它唯一使用的地方。另外,xhr
无法在您检查它时null
(如果浏览器没有XMLHttpRequest
或ActiveXObject
,则该代码会在行检查)。