Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .ajax问题_Javascript_Jquery_Ajax_This_Jsonp - Fatal编程技术网

Javascript .ajax问题

Javascript .ajax问题,javascript,jquery,ajax,this,jsonp,Javascript,Jquery,Ajax,This,Jsonp,$.ajax被包装到新的“get”函数中 若js文件中只有一个“get”调用,那个么就可以了。 但第2行中有2个呼叫失败 更确切地说, 第一次调用失败,出现“未捕获引用错误:未定义进程”, 第二个是成功的,但在success函数中它有第一个“get”调用的数据 正如我所猜测的,“this”与上下文之间存在一些问题。你能给我解释一下吗 (function() { "use strict"; function get(url, success, error)

$.ajax被包装到新的“get”函数中

若js文件中只有一个“get”调用,那个么就可以了。 但第2行中有2个呼叫失败

更确切地说, 第一次调用失败,出现“未捕获引用错误:未定义进程”, 第二个是成功的,但在success函数中它有第一个“get”调用的数据

正如我所猜测的,“this”与上下文之间存在一些问题。你能给我解释一下吗

    (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}
*/

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

jsonpCallback类型:字符串或函数()指定回调函数 JSONP请求的名称。将使用此值而不是 jQuery自动生成的随机名称。最好是让别人来 jQuery将生成一个唯一的名称,因为它将使管理 请求并提供回调和错误处理。你可能想 当您希望启用更好的浏览器缓存时,请指定回调 获取请求。从jQuery1.5开始,您还可以为此使用函数 设置,在这种情况下,jsonpCallback的值设置为return 该函数的值

问题是,jQuery使用指定的名称在窗口对象中创建全局函数,然后将其删除。 我没有完全了解jQuery库中发生的事情,但是 这个问题肯定是因为它试图调用刚刚被删除的函数


删除jsonpCallback参数可解决问题

也许您应该传入另一个jsonp回调。