包装$ .ajax问题

时间:2017-01-23 15:30:02

标签: javascript jquery ajax this jsonp

$ .ajax包含在新的'get'函数中。

如果js文件中只有一个'get'调用,那很好。 但是行中的2个调用失败。

更精确, 第一次调用失败,出现“Uncaught ReferenceError:process not defined”, 第二个是成功的,但是在成功函数中它有第一个'get'调用的数据。

正如我猜测的那样,'this'/ context存在一些问题。你能解释一下吗?

    (function() {
        "use strict";

        function get(url, success, error) {
            $.ajax({
                type: "GET",
                dataType: 'jsonp',
                jsonp: 'callback',
                jsonpCallback: 'process',
                url: url,
                success: success,
                error: error
            });
        }

        get('XXX',
            function(data, textStatus, jqXHR) {
                console.log("SUCCESS PING 1");
                console.log(data);
            },
            function(jqXHR, textStatus, errorThrown) {
                console.log("ERROR PIND 1");
            });

        get('YYY',
            function(data, textStatus, jqXHR) {
                console.log("SUCCESS PING 2");
                console.log(data);
            },
            function(jqXHR, textStatus, errorThrown) {
                console.log("ERROR PING 2");
            });
    })();

/*
===========================================
===============console=====================
===========================================
1. ERROR PIND WAR
2. Uncaught ReferenceError: process is not defined
    at db?callback=process&_=1485184752755:1
3. SUCCESS PING DB
4. Object {data for first call here}
*/

1 个答案:

答案 0 :(得分:0)

首先,它更好不指定自定义回调名称(' jsonpCallback'参数)

http://api.jquery.com/jQuery.ajax/

  

jsonpCallback类型:String或Function()指定回调函数   JSONP请求的名称。将使用此值代替   随机名称由jQuery自动生成。最好是让   jQuery生成一个唯一的名称,因为它可以更容易地管理   请求并提供回调和错误处理。你可能想要   如果要启用更好的浏览器缓存,请指定回调   GET请求。从jQuery 1.5开始,您也可以使用一个函数   设置,在这种情况下,jsonpCallback的值设置为return   该函数的价值。

问题是,jQuery在具有指定名称的window对象中创建全局函数,然后将其删除。 我没有设法全面了解jQuery库中发生的事情,但是 这个问题肯定是由于它试图调用刚被删除的函数引起的。

删除jsonpCallback参数解决问题