2012-06-29 33 views
1

我正在編寫一個聊天應用程序,並希望在第一次聊天呼叫中獲得隨後所有AJAX呼叫的設置。如何從AJAX調用中更新我的AJAX設置?

我設置的默認jQuery的AJAX設置:

jQ.ajaxSetup({ 
    url : 'chat.php', 
    contentType: 'application/json' 
    dataType : 'json', 
    type : 'post' 
}); 

然後我通過行動回報包含數據連接到特定聊天JSON對象。

jQ.ajax({ 
    data: { 
    'action' : 'connect' 
    }, 
    success: function (data) { 
    if (data.success) { 
    // set user ID and chat ID for all subsequent ajax calls 
     if (data.partner) { 
     // start fetching data to listen for messages 
     } else { 
     // keep checking for partner 
     } 
    } else { 
    // chat connect failed 
    } 
    } 
}); 

如果創建聊天和用戶連接到一個聊天對象,每0.2秒我從服務器獲取數據,像這樣:

setTimeout(fetchData, 200); 
function fetchData(){ 
    jQ.ajax({ 
    data: { 
     'action' : 'fetch' 
    }, 
    success: function (data) { 
     if (data.success) { 
     // update messages 
     } 
     setTimeout(fetchData, 200); 
    }); 
} 

我也有AJAX功能發佈數據斷開與聊天的連接,基本上他們都需要擁有與初始「連接」操作相同的聊天憑證。

什麼是最好的方法來實現這一目標?

+1

創建的共享範圍的數據對象,您可以使用後續請求傳遞到獲取包含客戶端ID信息 –

+0

我沒想到這樣做的數據,但不知道是否有任何:否則,它擴大其他方式來做到這一點,因爲它需要擴大與「行動」財產的對象! –

+0

是的,那正是我要做的。將證書存儲在「全局」對象中,然後根據需要使用操作擴展該全局對象。 –

回答

1

在全局範圍內創建一個包含憑證的對象,然後根據需要使用該操作對其進行擴展。

var credentials = {}; 

更新與第一Ajax請求對象,那麼後續各個則只需添加對象:

credentials.action = "fetch"; 

... 
data: credentials, 
... 

除非你加入不如行動多,你並不真的需要把它擴大。

data: $.extend({},credentials,{ action: "fetch", foo: "bar" }), 
+0

我忘了點語法,這很奇怪,因爲我用它來擴展'this'對象! –

0

請記住,您正在向ajax函數提供JSON對象。你需要連接或以其他方式後

$.ajax(ajax_settings); 

更改ajax_settings變量:

您可以將設置保存在一個變量,像這樣:

var ajax_settings = { 
    data: { ... }, 
    success: function(data) { ... }, 
}; 

和使用,在Ajax調用。

+0

Kevin B在評論中說了類似的東西,因爲我需要每次調用都有一個不同的成功函數,創建一個傳遞給數據對象的對象,該對象必須使用'action'屬性進行擴展。他的方法是正確的,儘管這個想法背後的理論是相同的。 –