2010-09-28 117 views
0


我正在使用jQuery.ajax()以及一些特定的data。其中一个是albumid,如果用户选择不使用他的某个专辑,则在服务器端生成该albumid。问题在于,如果用户将几张照片添加到新专辑中,则不是将所有照片添加到同一张专辑,而是创建多张专辑,每张专辑带有一张照片。动态修改jquery通过ajax发送的数据

什么是目前的工作:

  • 更新专辑(使用一个用户已经有)
  • 创建新专辑
  • 发回的新专辑编号

我试着根据在success事件上发回的新专辑ID更新专辑名称字段,认为在接下来的ajax调用中,属性data: ({ 'albumid': album.val())}将成为新专辑i d,但它仍然使用前一个值。

我知道这个问题可以通过使用async: false来解决,因为在这种情况下,每个ajax调用将使用专辑名称字段中的更新值,但它完全冻结了浏览器。

对这个问题你有什么技巧/建议吗?


干杯,
尼古拉斯。

+0

“它创建了几张专辑,每张专辑都有一张照片。”请解释'它'?服务器软件做到了吗? – Anders 2010-09-28 12:51:15

+0

一个遥远的服务器软件,以我上传图像。干杯, – Nicolas 2010-10-01 14:06:38

回答

0

听起来就像你有一个竞争条件。在没有看到代码的情况下很难确定,但是在成功处理程序中解析代码并且未对其进行评估时,album.val()可能会设置一次。

您仍然可以使用aync呼叫,但您必须以串行方式进行。它被称为主动对象模式。设置一个包含ajax调用并调用一个的数组。在成功处理程序中,每个人都有一个呼叫触发下一个呼叫。

+0

我想你完全了解我的情况,但你能否给我一个例子?干杯, – Nicolas 2010-10-01 14:00:07

0

您应该使用新值作为album.val()似乎不是用新值重新评估。

应该使用jQuery检索来自 $(“#hiddenId”)新专辑中值相当容易。VAL()

考虑到检索ID存储在创建隐藏字段来自ajax请求。

+0

我实际上是通过检索新的值:'album.val(msg);''成功'调用ajax。我没有看到我可以在这个方向上做更多的事情来刷新album.val()。另外我认为,因为所有图像都要求同时上传('async:true'),并且我只更新了'album.val()',当第一个请求上传时,其他人无法看到该字段实际上是在它们被调用之后更新的。 – Nicolas 2010-10-01 14:06:00

+0

如果您向我们提供您使用的jQuery版本以及您在代码快照中使用的相册插件,它肯定会有所帮助。也许可以有一些“黑客”做 – rasata 2010-10-06 20:30:39

+0

我正在使用jQuery 1.4.2,如果通过“插件”你的意思是远程服务器,它实际上是Facebook的,所以没有什么我们可以做在这一方我想。干杯, – Nicolas 2010-10-07 15:40:55