1

我正在创建完全基于 Ajax 的网站,因此所有操作都调用不同的 JS 函数,因此我在我的每个函数中使用这个 Ajax 代码,这使我的函数成为一个大代码。

if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        var getData=xmlhttp.responseText;
        if(getData=="something") {
            /* 
            code goes here
            */
        }
        else {
            /* 
            code goes here
            */
        }
    }
}
xmlhttp.open("GET","mypage.php",true);
xmlhttp.send();

所以我想问我是否应该使用仅包含上述 Ajax 代码的不同函数并全局声明我的变量 getData 以便在需要时调用它。

这是我想使用的方式

var getData=""; /*declaring var Globally (I read it like this dont know right)*/

function oneAjax(checkPage) {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            getData=xmlhttp.responseText;
            /*now check further in the function which called it*/
        }
    }
    xmlhttp.open("GET",checkPage+".php",true);
    xmlhttp.send();
}

它会不会与其他正在运行的操作产生任何冲突?或为我的问题提供任何正确的解决方案。

4

3 回答 3

2

如果您不打算使用现成的库,则应将“回调”传递给oneAjax

function oneAjax(checkPage, done, fail) {

     ...

     xmlhttp.onreadystatechange = function() {
         if (xmlhttp.readyState == 4) {
             if (xmlhttp.status == 200) {
                 done(xmlhttp.responseText, xmlhttp.status);
             } else {
                 fail(xmlhttp.status);
             }
          }
     };

 }

调整传递给回调的参数以满足您的要求。

要使用:

oneAjax('mypage', function(text, status) {
    // success
    console.log(status);
}, function(status) {
    // failure
    console.log(status);
});
于 2013-06-04T10:49:48.950 回答
1
于 2013-06-04T10:51:34.650 回答
0

我认为使用 jQuery 库会更好,并提供更好的低级抽象

<!-- add a protocol if on local ex: http: -->
<script src="//code.jquery.com/jquery-1.10.0.min.js"></script>
$.ajax({
  type: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

它还提供 JSONP 等功能来解决跨域问题

于 2013-06-04T10:55:11.310 回答