Javascript使用断点正确执行,但不是没有断点 - 为什么?

时间:2014-05-16 14:13:33

标签: javascript

我有一个奇怪的JavaScript问题:当我在带有window.location的行上使用断点(Firebug)运行我的JavaScript时,我的函数正常工作。但是当我把断点拿走时,它再也不起作用了。它表现得好像它不再执行savePublication()函数。

有人见过这样的问题吗?这是我的代码

$("#add").click(function (e) {

    // Create array with id values of checked checkboxes
    var idarray = $( "input:checked" )
         .map(function() { return $(this).attr("class"); }) //Project classes
         .get(); //to Array


    // save each checked publication to database    
    $.each(idarray, function(index, value) {
        savePublication(value);
    });

    // load new window
    var uid = $( '[name="user_id"]' ).val();
    window.location.href = BASE + '/cv/' + uid+'?panel=accordion_8';

});

在cas中这对解决问题很重要,这里的函数savePublication()为:

function savePublication(c) {

    // set variables
    var author;
    var title;
    var year;
    var subtitle;
    var user_id = $( '[name="user_id"]' ).val();


    // for each element with class = c
    $("."+c).each(function() {
        // get element name
        var attribute = $(this).attr("name");

        // get values of attributes and set new variables with values
        if(attribute === "author") author = htmlspecialchars_decode($(this).text());
        if(attribute === "contributor") contributor = $(this).text();
        if(attribute === "title") title = $(this).text();
        if(attribute === "year") year = $(this).text();
    });

    // variable joining authors and contributors
    var authors = author + ", " + contributor;

    // store data using appropriate route
    $.post(BASE + '/publication/storeWorldCat',
              {
                authors:    authors,
                title:      title,
                subtitle:   "à corriger dans addWorldCat.js",
                year:       year,
                user_id:    user_id,
              },
    function(data,status){
        alert("Data: " + data + "\nStatus: " + status);
    });

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

一旦你转到另一个页面,JavaScript就会停止执行。 您的$.post应该已经发生,但成功可能会也可能不会执行,具体取决于$.post需要多长时间。

当您放置断点时,$ .post结束并执行成功回调。

您可以通过设置async: false或等待$ .post来解决此问题:

$.post(BASE + '/publication/storeWorldCat',
          {
            authors:    authors,
            title:      title,
            subtitle:   "à corriger dans addWorldCat.js",
            year:       year,
            user_id:    user_id,
          },
function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
}).done(function() { 
     window.location = "...";
});

有关$.post().done()

的更多信息,请参见此处

答案 1 :(得分:0)

您可以像这样同步调用控制器:

var data = {
            authors:    authors,
            title:      title,
            subtitle:   "à corriger dans addWorldCat.js",
            year:       year,
            user_id:    user_id,
};

var success = function(data,status){
    alert("Data: " + data + "\nStatus: " + status);
});

$.ajax({
  type: 'POST',
  url: BASE + '/publication/storeWorldCat',
  data: data,
  success: success,
  dataType: dataType,
  async:false
});