1

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

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

4

2 回答 2

1

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

var credentials = {};

使用第一个 ajax 请求更新该对象,然后后续的将简单地添加到该对象:

credentials.action = "fetch";

...
data: credentials,
...

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

data: $.extend({},credentials,{ action: "fetch", foo: "bar" }),
于 2012-06-29T21:40:30.963 回答
0

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

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

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

并在 ajax 调用中使用它:

$.ajax(ajax_settings);

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

于 2012-06-29T21:26:50.020 回答