如何在AJAX调用中更新我的AJAX设置?

时间:2012-06-29 21:15:15

标签: jquery

我正在编写聊天应用程序,并希望在第一次聊天通话中获取所有后续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功能来发布数据并断开聊天,基本上他们都需要拥有初始“连接”操作设置的相同聊天凭据。

实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

创建一个包含全局范围内的凭据的对象,然后根据需要使用该操作扩展它。

var credentials = {};

使用第一个ajax请求更新该对象,然后后续的只会添加到对象:

credentials.action = "fetch";

...
data: credentials,
...

除非您添加的不仅仅是操作,否则您实际上并不需要扩展它。否则,用:

扩展它
data: $.extend({},credentials,{ action: "fetch", foo: "bar" }),

答案 1 :(得分:0)

请记住,您正在向ajax函数提供JSON对象。

您可以将设置存储在变量中,如下所示:

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

在ajax调用中使用它:

$.ajax(ajax_settings);

连接后或根据需要更改ajax_settings变量。