代码之家  ›  专栏  ›  技术社区  ›  Tommy B.

小型Ajax JavaScript库[关闭]

  •  25
  • Tommy B.  · 技术社区  · 14 年前

    我正在寻找一个非常小(一行)的Ajax JavaScript库来添加到一个小脚本的第一行以发出一些请求。

    我已经试过了:

    但它们根本不起作用。选择?

    6 回复  |  直到 10 年前
        1
  •  33
  •   Ryan Kinal    14 年前

    给你,很简单:

    function createXHR()
    {
        var xhr;
        if (window.ActiveXObject)
        {
            try
            {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e)
            {
                alert(e.message);
                xhr = null;
            }
        }
        else
        {
            xhr = new XMLHttpRequest();
        }
    
        return xhr;
    }
    

    文件是 here

    例子:

    var xhr = createXHR();
    xhr.onreadystatechange = function()
    {
        if (xhr.readyState === 4)
        {
            alert(xhr.responseText);
        }
    }
    xhr.open('GET', 'test.txt', true)
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.send()
    

    更新:

    为了进行跨域脚本编写,您要么调用本地服务器端代理(它读取并回送远程数据),要么,如果远程服务返回JSON,则使用以下方法:

    var s = document.createElement('script')
    s.src = 'remotewebservice.json';
    document.body.appendChild(s);
    

    因为JSON本质上是一个JavaScript对象或数组,所以这是一个有效的源。你 理论上 然后应该能够直接调用远程服务。我还没有测试过,但这似乎是一种公认的做法:

    参考文献: Calling Cross Domain Web Services in AJAX

        2
  •  20
  •   Michael Mior    10 年前
        3
  •  3
  •   Rion    13 年前

    所以……微小…

    var obj = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : (XMLHttpRequest && new XMLHttpRequest()) || null;
    
        4
  •  3
  •   Shimon Doodkin    11 年前

    这是我的node.js风格的异步回调版本

    https://gist.github.com/4706967

    // tinyxhr by Shimon Doodkin - licanse: public doamin - https://gist.github.com/4706967
    //
    // tinyxhr("site.com/ajaxaction",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data)  });
    // tinyxhr("site.com/ajaxaction",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data)  },'POST','value1=1&value2=2');
    // tinyxhr("site.com/ajaxaction.json",function (err,data,xhr){ if (err) console.log("goterr ",err,'status='+xhr.status); console.log(data); console.log(JSON.parse(data))  },'POST',JSON.stringify({value:1}),'application/javascript'); 
    // cb - function (err,data,XMLHttpRequestObject){ if (err) throw err;   }
    // 
    
    function tinyxhr(url,cb,method,post,contenttype)
    {
     var requestTimeout,xhr;
     try{ xhr = new XMLHttpRequest(); }catch(e){
     try{ xhr = new ActiveXObject("Msxml2.XMLHTTP"); }catch (e){
      if(console)console.log("tinyxhr: XMLHttpRequest not supported");
      return null;
     }
     }
     requestTimeout = setTimeout(function() {xhr.abort(); cb(new Error("tinyxhr: aborted by a timeout"), "",xhr); }, 5000);
     xhr.onreadystatechange = function()
     {
      if (xhr.readyState != 4) return;
      clearTimeout(requestTimeout);
      cb(xhr.status != 200?new Error("tinyxhr: server respnse status is "+xhr.status):false, xhr.responseText,xhr);
     }
     xhr.open(method?method.toUpperCase():"GET", url, true);
    
     //xhr.withCredentials = true;
    
     if(!post)
      xhr.send();
     else
     {
      xhr.setRequestHeader('Content-type', contenttype?contenttype:'application/x-www-form-urlencoded');
      xhr.send(post)
     }
    }
    
    tinyxhr("/test",function (err,data,xhr){ if (err) console.log("goterr ",err); console.log(data)  });
    
        5
  •  0
  •   Michael Mior    10 年前

    你可以用煎蛋卷。它是一个单独的文件,包含许多常用的JavaScript函数,如Ajax请求。

    https://github.com/agaase/omee/blob/master/src/omee.js

    要提出Ajax请求,只需调用 欧美葡萄干

    带着论据

    参数-参数列表,例如param1=param1value¶m2=param2value

    url-点击服务器的url

    func-要回调的函数名

    ConnType-获取/发布。

        6
  •  -1
  •   Pekka    14 年前

    好。。。。。。 jQuery 可能比你想要的要大,但这仍然是一个很好的选择。它有很好的文档记录、支持,如果您使用cdn链接

    http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
    

    它甚至很可能已经存在并缓存在客户机上。