javascript仅使用断点执行

时间:2011-07-02 17:47:27

标签: javascript jquery firebug

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

$('#skip').click(function(e) {
   savePhoto('skip');
   showNextPlace();
   photo_changed = 0;
   return false;
});

showNextPlace()photo_changed = 0;仅在我添加断点时执行。 savePhoto();的代码非常基本。我根据places数组中的状态和元素数提交请求。

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] );
                      }
                  }
              }
          });
      }
  }

对于为什么会发生这种情况或者如何更好地调试问题?

3 个答案:

答案 0 :(得分:2)

异步XHR调用

$.ajax({ ... })

可能在断点存在时到达,但是当没有断点运行时,XHR请求在达到该代码时仍在进行中。

也许你应该对$ .ajax调用进行回调,该调用显示了加载场所后的下一个位置。

如果布尔值showNextPlace为真,则可以使用$ .ajax处理程序调用{​​{1}},如果没有下一个要显示的地方,则调用它时needsToShowNextPlace设置该布尔值

答案 1 :(得分:1)

由于$.ajax调用是异步的,您应该将代码放在success处理程序中,如下所示:

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_changed=0savePhoto('skip')完成执行之前正在执行。 (那是异步的)。它适用于断点,因为它给了savePhoto()足够的时间来完成。

希望这会有所帮助。干杯

答案 2 :(得分:-1)

问题与AJAX调用无关。在代码的另一部分中,每次用户按下保存按钮时,我都会将事件绑定到图像字段(因此第二次执行代码2次,第3次等等)。记得解除绑定! / p>

此外,作物的一部分&amp;即使我点击了skip,也正在执行save plugin,所以我添加了一些控制变量。

解决方案:在逻辑可以运行的每个路径上使用console.log()。