2011-06-27 63 views
0

在我的代碼JSON字符串我有以下jQuery的:如何發送一個Ajax請求,並保存爲另一個電話

var response = ""; 
function send_ajax(){ 
if(response == ""){ 
    $.ajax({ 
    url: url 
    type: 'POST', 
    dataType: "JSON", 
    success: function(data){ 
     response = data; 
    } 
    }); 
} 
} 

我的問題是,send_ajax功能在我的腳本打過幾次電話,有時候很多的ajax調用發送到一起,沒有必要的。所以我正在尋找一個解決方案,其中如果一個Ajax請求發送其他調用,應該等到該函數將數據保存在響應var並使用它。

我該怎麼做?

+0

的缺點回調/事件驅動的範例之一的最好的例子:異步調用的同步。 – jerluc

+0

sup ra_htial theres在你的代碼中沒有回調asume你想要和que調用者回調,如果請求正在進行???其他明智的只是使用布爾值來告訴他們你已經提出了一個請求。 – megakorre

回答

2

如果將async標誌設置爲false,則在第一次調用完成之前不會進行其他調用。

$.ajax({ 
    url: url 
    type: 'POST', 
    dataType: "JSON", 
    async: false, 
    success: function(data){ 
     response = data; 
    } 
    }); 
+0

我認爲這應該工作,如果我設置async:false&beforeSend回調來檢查我是否(響應!=「」) {xhr.abort(); } – trrrrrrm

0
if(response == ""){ 
response = 'waiting'; 

會做詭計嗎?

+0

是的,這很好,但現在如何保持該調用的執行,並等待獲得響應,然後繼續執行? – trrrrrrm

+0

你不能執行js單線程你需要使用回調 – megakorre

+0

你不能「持有它」,但如果你添加這個response ='waiting'位,那麼在響應最終被清空之前,空返回的AJAX調用)。不要改變任何其他功能。這應該是有效的。編輯:更清楚:JS是事件觸發,並沒有執行可以延遲其他等效函數調用。只需在$ .ajax回調函數調用後,您想要在收到響應後 – Cystack

0

,如果你想在$就是異步的,但只允許在任何時間一個Ajax請求另一種解決方案。你可以看看$ .ajaxStart和$ .ajaxStop全球盛會

var ajaxLock = false; 
$.ajaxStart(function(){ajaxLock = true;}); 
$.ajaxStop(function(){ajaxLock = false;}); 
var ajaxRequest = function(url, data) { 
    if (!ajaxLock) { 
     $.ajax({ 
      url: url 
      type: 'POST', 
      dataType: "JSON", 
      async: false, 
      success: function(data){ 
       response = data; 
      } 
      }); 
    } 
} 
相關問題