0

我的网站正在向我的 Web 服务发送 ajax 帖子,而 Web 服务作为回报将返回一个 json,并且该 json 将在成功回调中进一步使用。

现在,这是我的问题,当我的网站发送多个 ajax 帖子时,Web 服务返回的那些 json 似乎混乱了。

我正在考虑同步 ajax 帖子或网络服务 (REST)?我读到您不需要同步 REST 服务,是这样吗?如果同步是解决方案,我应该在哪里同步它?ajax 中的 async: false 会同步帖子吗?

谢谢。

我想过包括一些代码:

网络服务:

@POST
@Override
@Produces("application/json")
@Consumes("application/json")
public Customer create(Customer cust){
    custManager.save(cust);
    return custManager.getCust(custManager.getCount());
}

阿贾克斯:

$.ajax({
  url:  custURL,
  type: 'POST',
  data: JSON.stringify(sdata),
  dataType: 'json',
  contentType: 'application/json; charset=utf-8',
  success: function(json){
     var cust = JSON.parse(JSON.stringify(json));
     var newId = cust.id;
     updateCustId(oldId, newId);
  }
});

它所做的是将客户的数据发布到 Web 服务,并且 Web 服务为其指定一个 id 并将其返回给客户端以更新其客户 id。不仅如此,我还将引用旧客户 ID 的其他表更新为从服务器生成的新表,并且在更新这些其他表之后,它也将被发送到 Web 服务。我说的表是 web sql,它的查询也是异步工作的。所以最终结果是有时 id 被弄乱了,其他表被发送到 web 服务,但它使用的 customerid 仍然是旧的(我使用了回调,确保在发送之前需要先更新它到服务器)。

让我的 ajax 调用 async: false 使它们同步而不是混在一起工作。

4

1 回答 1

1

我不认为你的问题是异步的,特别是。听起来您的 Web 服务实现中有一些错误。您所描述的应该可以正常工作。

多个 Ajax 请求是完全独立的。后端服务器应分别处理每个请求。

在 Web 应用程序的线程之间共享数据时,您可能会遇到问题,这会导致同时访问相同数据时出现问题。如果是这样,这就是要解决的问题,并且(在最坏的情况下),只需在一小段代码周围放置一个互斥体,即进行交叉污染。

如果您发现数据可以正常离开服务器,但在您的应用程序中已损坏,那么错误就在那里。

我强烈建议不要尝试通过使整个应用程序同步来掩盖听起来像是重大后端错误的内容。修复潜在的损坏问题,如果该问题是由无法使线程安全的东西引起的,那么就锁定那一点点。

您关于 REST 的问题有点无关紧要。无论代码是否需要同步,REST 服务与其他架构都不会改变。当您使用 Ajax 时,您使用的是 HTTP 协议,该协议旨在实现异步和无状态。在我看来,需要客户端同步访问的任何样式的 Web 应用程序都是一个很大的危险信号。

除了一般建议之外,您还需要询问基于代码的特定问题以获取更多详细信息。

于 2012-07-16T14:31:44.660 回答