2012-12-24 220 views
3

jQuery AJAX似乎在發送兩個請求。由於我使用的是基於時間的雙因素身份驗證方法,因此第二個請求失敗,因此原始請求「失敗」。jQuery AJAX發送兩個請求

第一個是發佈請求,沒關係,但後來有GET請求,這是不好的。

這裏是我用來生成查詢的JavaScript。

$('#form').live('submit', function(event) { 
    var target = $('#ajax'); 
    var url = '/ajax/user/authenticateLevel3'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $('#form').serialize(), 
     dataType: 'json', 
     success: function(data, status) { 
      $.getJSON(url, function(data) { 

       if (!data.resultCode) { 
       $('#ajax').html($.base64.decode(data.html)); 
       $('#ajax').modal(); 
       } else { 
        location.reload(); 
       } 

      }); 
     } 
    }); 
    event.preventDefault(); 
}); 

任何想法如何解決這個問題?

+6

你確實看到你實際上提出了兩個請求嗎? '.ajax'是其中之一,'$ .getJSON'是第二個。 – Shmiddty

+2

在不相關的說明中,['live'](http://api.jquery.com/live)方法已被棄用了相當長一段時間。不要使用它。 – nbrooks

+0

@Shmiddty,恩,是嗎?我應該怎麼做? @nbrooks,我正在將東西移動到'.on()'。 – bear

回答

0

getJSON是用於檢索的AJAX方法JSON來自服務器,而不是用於處理其他ajax方法返回的數據。只要刪除它。

$('#form').live('submit', function(event) { 
    var target = $('#ajax'); 
    var url = '/ajax/user/authenticateLevel3'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $('#form').serialize(), 
     dataType: 'json', 
     success: function(data, status) { 
      if (!data.resultCode) { 
      $('#ajax').html($.base64.decode(data.html)); 
      $('#ajax').modal(); 
      } else { 
       location.reload(); 
      } 
     } 
    }); 
    event.preventDefault(); 
}); 

既然你提到你切換到.on,語法將是這樣的:

$(parent).on('submit', '#form', function(event) { 
    /* 
    * ... 
    */ 
}); 

其中parent#form最近的靜態父元素。

4

那是因爲你正在做2次Ajax調用(.ajax.getJSON

嘗試(使用而不是.live文檔事件代表團)這樣做,而不是:

$(document).on('submit', '#form', function(event) { 
    var target = $('#ajax'); 
    var url = '/ajax/user/authenticateLevel3'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $('#form').serialize(), 
     dataType: 'json', 
     success: function(data, status) { 
      if (!data.resultCode) { 
       $('#ajax').html($.base64.decode(data.html)); 
       $('#ajax').modal(); 
      } else { 
       location.reload(); 
      } 
     } 
    }); 
    event.preventDefault(); 
}); 
2

您正在發送2項請求。一個使用.ajax,另一個使用.getJson。

刪除.getJson請求。沒有傳遞給.ajax的dataType屬性,jquery將嘗試猜測響應類型。你也可以指定dataType爲json來強制轉換。成功回調的'data'參數應該轉換爲這兩個選項的javascript對象。