未捕获引用错误:JQuery22203175114964962158_147074344495未在JSONP AJAX请求中定义

未捕获引用错误:JQuery22203175114964962158_147074344495未在JSONP AJAX请求中定义,jquery,ajax,Jquery,Ajax,我正在发出一个AJAX请求,以从服务器获取一些数据。为了限制请求(由于大量请求会破坏服务器),我设置了请求超时。我得到一个错误: 未捕获引用错误:未定义JQuery22203175114964962158_147074344495 谁能帮我修一下吗 jQuery.ajax({ url: url, // some url link here type: "GET", contentType: "application/jsonp; charset=utf-8",

我正在发出一个AJAX请求,以从服务器获取一些数据。为了限制请求(由于大量请求会破坏服务器),我设置了请求超时。我得到一个错误:

未捕获引用错误:未定义JQuery22203175114964962158_147074344495

谁能帮我修一下吗

jQuery.ajax({
    url: url,  // some url link here
    type: "GET",
    contentType: "application/jsonp; charset=utf-8",
    dataType: 'jsonp',
    timeout: 5000,
    success: function(data, status) {
        // some stuffs
    },
    error: function (xhr, status, error) {
        // some stuffs
    }
});
我提到过。 并尝试添加类似
{'jsonpcallback':'mycallback'}
的属性。但这对我不起作用


提前感谢。

发生这种情况是因为请求所花的时间超过了指定的
超时时间。当一个请求花费的时间超过
超时
限制时,该请求将被视为失败,并且永远不会完成。如果您希望容忍完成请求所需的时间超过5秒,则应指定一个更高的
超时值
值(如果您可以无限期地接受等待,则完全忽略该值)

JSONP通过在表单的
元素中加载文件来工作

jQuery22303175114964962158_1470743444495({ some: "data" });
这会导致名为
jquery22203175114964962158_147074344495
的函数运行,并将一些数据作为参数。当jQuery从服务器请求脚本文件时,它会自动设置一个名为
jquery22203175114964962158_147074344495
的函数(该函数最终调用
success
函数)。但是,当设置
超时时,jQuery会在超时时间窗口结束时删除该函数,因此您会看到错误
jquery22203175114964962158_1470743444445未定义
,因为加载了
,但它调用的函数在五秒钟后不再存在

假设我想让我的朋友来我家给我一把螺丝刀。我们通过电话进行了以下交流:

我:嗨,朋友!请把你的螺丝刀借给我。你能把它送到我家吗

朋友:我很乐意。我可以把它放在哪里

我:我正在走廊上放一个紫色的篮子。请把它放在那里

由于您正在设置超时,在这个类比中,您还决定在等待五个小时后移除紫色篮子。当你的朋友六小时后出现时,他没有看到紫色的篮子(因为你在一小时前把它拿了回来),他说

朋友:错误:找不到紫色篮子

当然,这里的解决方案是不移除紫色篮子(即,不要设置
超时
值),除非您确实有很好的理由在固定时间段后拒绝响应。如果你确实有一个很好的理由在一段固定的时间后拒绝回复,那么如果你的请求在这段时间后失败,那也不是问题:这正是你所要求的


由于您不希望您的请求总是在五秒钟后失败,因此不要设置导致请求在五秒钟后失败的
超时:5000

尽管这实际上是所需的操作,因为匿名函数在超时后被删除,并且不再像以前回答的那样存在,仍然可以通过全局异常处理程序捕获该异常

window.onerror=函数(e){
log('Exception:'+e+'');
返回true;

}; 请求是否在5秒超时后完成?如果是这样,这种行为是100%设计的:错误告诉您,请求将无法完成,因为它花费的时间超过了指定的
超时
限制。您能告诉我如何处理超过指定时间限制的请求吗。因此,此问题可能会解决@apsillers谢谢您的回复。。这有助于我找出我的错误。。有没有其他方法(不删除超时值)来解决这个问题?@Jeni我完全不明白你的问题是什么。
timeout
值的目的是使请求在一定时间后失败,而这正是正在发生的事情,对吗?如果您不想使用
timeout
提供的功能,请不要使用它。如果您确实需要该功能,请使用它。你到底想要什么
timeout
去做那些没有做的事情(或者它在做什么你希望它没有做的事情)?是的,我同意你的观点。。删除
超时后
对我来说效果很好。。我想中止5秒后出现的响应。但现在我有了一些想法。。。非常感谢:-)@apsillers