模拟ajax的 script请求

/**
     * 模拟ajax的 script请求
     * @param  {[type]} options [description]
     * @return {[type]}         [description]
     */
    function createAjax(options) {

        if (typeof url === "object") {
            options = url;
            url = undefined;
        }

        options = options || {};

        /**
         * 参数
         * jQuery.ajaxSetup 是默认参数
         * @type {[type]}
         */
        var s = jQuery.ajaxSetup({}, options);

        // Deferreds
        // 异步机制
        var deferred = jQuery.Deferred();
        var completeDeferred = jQuery.Callbacks("once memory");

        /**
         * 实际返回的ajax对象
         * @type {Object}
         */
        var jqXHR = {}

        // 把jqXHR对象转化promise对象,幷加入complete、success、error方法
        deferred.promise(jqXHR).complete = completeDeferred.add;
        //别名
        jqXHR.success = jqXHR.done;
        jqXHR.error = jqXHR.fail;

        // 增加回调队列
        // complete: function() {
        //     console.log(‘局部事件complete‘)
        // },
        // error: function() {
        //     console.log(‘局部事件error请求失败时调用此函数‘)
        // },
        // success: function() {
        //     console.log(‘局部事件success‘)
        // }
        for (i in {
            success: 1,
            error: 1,
            complete: 1
        }) {
            jqXHR[i](s[i]);
        }

        function send(_, complete) {
            var script = jQuery("<script>").prop({
                async: true,
                charset: s.scriptCharset,
                src: s.url
            }).on(
                "load error",
                callback = function(evt) {
                    script.remove();
                    callback = null;
                    if (evt) {
                        complete(evt.type === "error" ? 404 : 200, evt.type);
                    }
                }
            );
            document.head.appendChild(script[0]);
        }

        function done(status, nativeStatusText, responses, headers) {
            var isSuccess = status >= 200 && status < 300 || status === 304;
            var success = jqXHR.success;
            var error = jqXHR.error;
            if (isSuccess) {
                deferred.resolveWith(document, [success, jqXHR]);
            } else {
                deferred.rejectWith(document, [jqXHR, error]);
            }
        }

        //发送请求
        send({
            Accept: "text/javascript, application/javascript, application/ecmascri"
        }, done);

        return jqXHR;
    }

    function show(data){
        $(‘body‘).append(‘<li>‘+ data +‘</li>‘);
    }

        //执行一个异步的HTTP(Ajax)的请求。
        var ajax = createAjax({
            url: ‘http://code.jquery.com/jquery-latest.js‘,
            dataType: ‘script‘,
            //请求完成后回调函数 (请求success 和 error之后均调用)
            complete: function() {
                show(‘局部事件complete‘)
            },
            error: function() {
                show(‘局部事件error请求失败时调用此函数‘)
            },
            success: function() {
                show(‘局部事件success‘)
            }
        })

        ajax.done(function() {
           show(‘deferred done‘)
        }).fail(function() {
            show(‘deferred fail‘)
        }).always(function() {
            show(‘deferred lways‘)
        })
时间: 2024-10-06 22:52:17

模拟ajax的 script请求的相关文章

POSTMAN模拟AJAX请求

环境: 1.测试工具:POSTMAN 2.调试框架:THINKPHP 3.开发工具:PHPSTORM 需求: 1.判断HTTP提交过来的请求是否为AJAX: 是:进行,修改.新增 否:进行查询,并返回一条记录 配置: 1.POSTMAN配置: 1)提交模式:POST 2)Headers增加参数: Content-Type 为:application/x-www-form-urlencoded X-Requested-With 为:xmlhttprequest 3)Body选择为:x-www-fo

模拟ajax请求爬取微博

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/26 10:26 # @Author : Sa.Song # @Desc : 抓取崔庆才微博, 模拟ajax请求 # @File : weiBo.py # @Software: PyCharm import requests from urllib.parse import urlencode from pyquery import PyQuery as pq heade

ajax发送异步请求

一:得到XMLHttpRequest对象 ajax其实只需要学习XMLHttpRequest一个对象 大多数浏览器都支持: var xmlHttp = new XMLHttprequest(); IE 6.0: var mltHttp = new ActiveXObject("Msxml2.XMLHTTP"); IE 5.5 及更早的IE var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); * 编写创建XMLH

Web:AJAX的网络请求

1.通过XMLHttpRequest方式发送请求 (1)前提创建XMLHttpRequest对象: //发送请求 var request; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }else{ request = new ActiveXObject("Microsoft.XMLHTTP"); } (2)然后通过XMLHttpRequest对象调用open()和send()发送请求: //第一种ajax请求

JQuery的Ajax跨域请求的

JQuery的Ajax跨域请求的(Ajax) 什么是jsonp格式呢?API原文:假设获取的数据文件存放在远程server上(域名不同.也就是跨域获取数据),则须要使用jsonp类型.使用这样的类型的话,会创建一个查询字符串參数 callback=? .这个參数会加在请求的URL后面. server端应当在JSON数据前加上回调函数名.以便完毕一个有效的JSONP请求.意思就是远程服务端须要对返回的数据做下处理,依据client提交的callback的參数,返回一个callback(json)的

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

ajax从struts2请求数据的返回形式

这篇随笔算是接上篇的数据请求返回,上一篇关于分页用的返回的数据形式是json,http://www.cnblogs.com/tele-share/p/7192206.html这次主要探讨ajax从struts接收html和io流的数据形式. 方式一:接收html格式的数据 jsp页面 1 <!-- ajax从struts请求拼接完成的html --> 2 <script type="text/javascript"> 3 var url = "${pa

Ajax的基本请求/响应模型

一.Ajax工作核心 Ajax的核心是JavaScript对象XMLHttpRequest(简称XHR).它是一种支持异步请求的技术.可以通过使用XHR对象向服务器提出请求并处理响应,而不阻塞用户. Ajax可以完成的功能有: 在不重新加载页面的情况下更新网页 在页面已加载后从服务器请求数据 在页面已加载后从服务器接收数据 在后台向服务器发送数据 1.1 Ajax简介 Ajax可以说 是目前最流行的 WEB 技术,它采用客户端脚本与 Web 服务器交换数据,也就是说,客户端的表单请求不是直接给

Ajax 跨域请求-- Cross Domain

在认识 跨域 之前,先简单了解下域名和协议名,比如下面这个 URL http://mail.163.com/index.html http://              协议名,也就是HTTP超文本传输协议 mail                  服务器名 163.com           域名 mail.163.com    网站名 /                        根目录 index.html         根目录下的默认网页 1.什么是跨域请求? 请求的下一个资源