js实现jq的ajax

本文将介绍如何使用js封装一段代码,实现jq的ajax功能,每一步代码均有注释便于理解

实现代码

function ajax(){
 //获取ajax的相应值(请求类型,请求地址,同步或异步,传递数据,接收数据类型,成功失败函数等)
  var ajaxData = {
    type:arguments[0].type || "GET",
    url:arguments[0].url || "",
    async:arguments[0].async || "true",
    data:arguments[0].data || null,
    dataType:arguments[0].dataType || "text",
    contentType:arguments[0].contentType || "application/x-www-form-urlencoded",
    beforeSend:arguments[0].beforeSend || function(){},
    success:arguments[0].success || function(){},
    error:arguments[0].error || function(){}
  }
  ajaxData.beforeSend()
  var xhr = createxmlHttpRequest();    //创建 XMLHttpRequest 对象
  xhr.responseType=ajaxData.dataType;  //预期服务器返回的数据类型
  xhr.open(ajaxData.type,ajaxData.url,ajaxData.async);  //规定请求的类型、URL 以及是否异步处理请求
  xhr.setRequestHeader("Content-Type",ajaxData.contentType);  //发送信息至服务器时内容编码类型(向请求添加 HTTP 头)
  xhr.send(convertData(ajaxData.data));                     //将请求发送到服务器
  //当请求被发送到服务器时,我们需要执行一些基于响应的任务。
  //每当 readyState 改变时,就会触发 onreadystatechange 事件。
  //readyState 属性存有 XMLHttpRequest 的状态信息。
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      if(xhr.status == 200){
        ajaxData.success(xhr.response)
      }else{
        ajaxData.error()
      }
    }
  }
}
//创建 XMLHttpRequest 对象
function createxmlHttpRequest() {
  if (window.ActiveXObject) {
    // IE6, IE5 浏览器执行代码
    return new ActiveXObject("Microsoft.XMLHTTP");
  } else if (window.XMLHttpRequest) {
     //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    return new XMLHttpRequest();
  }
}
//解析传入的对象
function convertData(data){
  if( typeof data === ‘object‘ ){
    var convertResult = "" ;
    for(var c in data){
      convertResult+= c + "=" + data[c] + "&";
    }
    convertResult=convertResult.substring(0,convertResult.length-1)
    return convertResult;
  }else{
    return data;
  }
}

调用方法

ajax({
      type:"POST",
      url:"ajax.php",
      dataType:"json",
      data:{"val1":"abc","val2":123,"val3":"456"},
      beforeSend:function(){
        //some js code
      },
      success:function(msg){
        console.log(msg)
      },
      error:function(){
        console.log("error")
      }
    })
时间: 2024-07-29 12:33:11

js实现jq的ajax的相关文章

(JS/JQ)与Ajax

JS与Ajax(异步JS和XML): 1.XMLHttpRequest对象的常用方法: open()准备请求   send()传送请求   abort()取消请求 readyState(请求状态码):0(未开始).1(开启).2(已传送).3(接收中).4(已载入) status(HTTP请求状态码):404(找不到文件).200(OK) onreadystatechange:请求状态改变时会被调用函数引用 responseText:服务器返回的纯文本字符串 responseXML:服务器返回的

前端 jq的ajax请求

jq的ajax请求 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ajax</title> </head> <body> <h1>ajax请求</h1> <input type="text" name="username" id="user

jq的ajax方法

相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and XML),异步的xml和js对象,主要用于在不刷新全局页面的基础上,更新局部页面,多用于表单提交,搜索更新 在jq中的ajax对象的格式为: $.ajax({ // some code... }) js的ajax对象在此不多赘述 二:各类属性 一个完整的ajax对象起码应该有四个属性:type, url,data,success 1.type 这个是a

jq中ajax的使用

jq中ajax必须在服务器环境下使用 $.ajax({ url:"json.json", //请求的url地址 dataType:"json", //返回格式为json type:"GET", //请求方式 beforeSend:function(){ $('#div3').html('加载中...') }, success:function(data,status){//第一个参数包含获取的内容,第二个参数为执行的状态 var tt="

前端双引号单引号,正则反向引用,js比较jq

1.js,jq,css,html属性必须双,如果同时出现需要嵌套使用,属性的规范是双但是也可以用单测试有效 单引号现象举例:jq中获取元素标签是单引号:$('input').click:弹出也是单引号: alert('aaaa'):jq根据id获取元素和设置css都一般用单引号:$('#box').css('color', 'red'); 上述两种情况全部换成双引号也是行的!2.分号的用法: {}作为函数体一般是不需要分号结束的,()一般需要分号结束,除非作为一个函数的参数就不需要分号:3.js

JS和JQ的event对象对比和应用

摘要 js和jq的event对象大同小异,本文简单对比下它们的'click'事件下的不同和应用 js jquery jq event 代码测试: ? 1 2 3 4 5 6 7 <div id= "test" ><p>test text<p></div> <script src= "vendor/jquery-2.1.1.js" ></script> <script> test.ad

angular js 多处获取ajax数据的方法

angular js 多处获取ajax数据的方法 var app=angular.module("cart",[]);app.service("getData",function ($http) { return{ ajax:function () { return $http.get("product.json"); } }}); app.controller("listCtrl",function ($scope,getD

js模拟jq获取id

js模拟jq获取id: (jquery)需要自己添加 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js模拟jq的点击效果</title> <style> * {margin: 0; padding: 0;} #btn {display:block;height: 30px; width:

JS案例之4——Ajax多图上传

近期项目中有好几次用到多图上传,第一次在项目中真正用到Ajax技术,稍微整理了下,贴个案例出来. 我们传统的做法是当用户提交一个表单时,就向web服务器端发送一个请求.服务器接受并处理传来的表单信息,处理完成后返回一个新的页面.这个做法比较浪费带宽,当请求数较多时,页面响应的时间就依赖于服务器处理的时间. 而Ajax应用仅向服务器发送并取回必需的数据,其他不需要的数据不用响应,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JS来处理来自服务器的响应.因此在服务器和