javascript仅使用断点执行
我对JS和jQuery有一个非常奇怪的问题javascript仅使用断点执行,javascript,jquery,firebug,Javascript,Jquery,Firebug,我对JS和jQuery有一个非常奇怪的问题 $('#skip').click(function(e) { savePhoto('skip'); showNextPlace(); photo_changed = 0; return false; }); showNextPlace()和photo\u changed=0仅在添加断点时执行。savePhoto()的代码是非常基本的。我根据位置数组中的状态和元素数提交请求 function savePhoto( status
$('#skip').click(function(e) {
savePhoto('skip');
showNextPlace();
photo_changed = 0;
return false;
});
showNextPlace()
和photo\u changed=0代码>仅在添加断点时执行。savePhoto()的代码代码>是非常基本的。我根据位置数组中的状态和元素数提交请求
function savePhoto( status )
{
if ( places.length <= 5 )
{
// load more places
$('#loadmore').val('1');
}
// Don't send a request on skip unless we need more places
if ( status != 'skip' || $('#loadmore').val() == 1 )
{
$.ajax({
url: "url" + status,
cache: false,
data: $('#form_photo').serialize(),
success: function(results){
// dont load more places until we have few
$('#loadmore').val('0');
if ( results != '[]' )
{
for ( var i in results )
{
places.push( results[i] );
}
}
}
});
}
}
功能保存照片(状态)
{
if(places.length异步XHR调用
$.ajax({ ... })
很可能是在断点存在时到达的,但是当没有使用断点运行时,当到达该代码时,XHR请求仍在运行中
也许您应该为$.ajax调用设置一个回调,该调用显示加载位置后的下一个位置
如果布尔值needsToShowNextPlace
为true,则可以调用$.ajax处理程序showNextPlace
,如果在没有下一个显示位置时调用$.ajax处理程序,则可以将其设置为布尔值。由于$.ajax
调用是异步的,您应该将代码放入成功
处理程序中像这样:
success: function(results){
// dont load more places until we have few
$('#loadmore').val('0');
if ( results != '[]' )
{
for ( var i in results )
{
places.push( results[i] );
}
}
showNextPlace(); //Moved here
photo_changed = 0; //Moved here
}
因此,您的单击绑定将是:
$('#skip').click(function(e) {
savePhoto('skip');
return false;
});
它不起作用是因为,在原始代码中,showNextPlace()
和photo\u changed=0
在savePhoto('skip')
完成其执行之前执行。(这是异步的)。它使用断点工作,因为它给了savePhoto()
足够的时间来完成
希望这有帮助。干杯问题与AJAX调用无关。在代码的另一部分中,每次用户按下“保存”按钮时,我都会将一个事件绑定到图像字段(因此第二次执行代码时会执行2次,第三次执行3次,等等),请记住取消绑定
此外,即使我点击了skip,裁剪保存插件的某些部分也会被执行,所以我添加了一些控制变量
解决方案:console.log()位于逻辑可以到达的每个路径上。如果在success
回调中注释掉代码,它是否有效?是否有任何错误?向函数调用添加一些日志,以查看实际运行的内容,例如console.log('showNextPlace'))
toshowNextPlace
函数。你是对的。但我希望他能得到这个想法,然后他就能重构它。谢谢,但这不是我所期望的工作方式。保存当前照片和显示下一张照片是两个不同且不相关的事件。我发送了AJAX请求,但我不会对结果进行任何修改showNextPlace()函数。我只是希望界面速度更快,所以我将照片保存在后台,并立即加载下一张照片。更进一步,AJAX请求并不总是执行(如果status=skip和loadmore=0,我不会像您看到的那样调用它)。谢谢,但AJAX请求并不总是执行(如果status=skip和loadmore=0,我不会像您看到的那样调用它),并且成功代码不会修改showNextPlace()函数。@fesja,我假设showNextPlace
使用由成功代码修改的places
数组。不是这样吗?是和否。在places
数组中,我有一个位置队列。当我调用AJAX请求时,数组中有5个元素。我将收到的位置添加到队列中。但是问题是与此AJAX请求无关。请参阅下面我的答案。无论如何,谢谢!我认为这没有关系!很高兴我找到了它:)