javascript仅使用断点执行

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

我对JS和jQuery有一个非常奇怪的问题

$('#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'))
to
showNextPlace
函数。你是对的。但我希望他能得到这个想法,然后他就能重构它。谢谢,但这不是我所期望的工作方式。保存当前照片和显示下一张照片是两个不同且不相关的事件。我发送了AJAX请求,但我不会对结果进行任何修改showNextPlace()函数。我只是希望界面速度更快,所以我将照片保存在后台,并立即加载下一张照片。更进一步,AJAX请求并不总是执行(如果status=skip和loadmore=0,我不会像您看到的那样调用它)。谢谢,但AJAX请求并不总是执行(如果status=skip和loadmore=0,我不会像您看到的那样调用它),并且成功代码不会修改showNextPlace()函数。@fesja,我假设
showNextPlace
使用由成功代码修改的
places
数组。不是这样吗?是和否。在
places
数组中,我有一个位置队列。当我调用AJAX请求时,数组中有5个元素。我将收到的位置添加到队列中。但是问题是与此AJAX请求无关。请参阅下面我的答案。无论如何,谢谢!我认为这没有关系!很高兴我找到了它:)