运行 AJAX 函数的多个实例 - 仅第二个实例更新
running multiple instances of ajax function - only second instance updates
我在调用同一 Ajax.Request 函数的多个实例时遇到困难。 (我使用的是原型框架)。这是函数:
function send_SMS(id)
{
status_id = 'status_link_' + id;
new Ajax.Request('sendSMS.php',
{
method:'post',
parameters: {link_id: id},
onCreate: function(){
$(status_id).update("sending...");
},
onSuccess: function(transport){
if (transport.responseJSON.success) {
$(status_id).update("sent");
} else {
$(status_id).update("unable to send");
}
},
onFailure: function(){
$(status_id).update("unable to send");
}
});
}
如果我使用 2 个不同的 ID 号调用此函数两次,即:
send_SMS("1");
send_SMS("2");
只有第二个 ID 由 onSuccess 函数更新。 sendSMS.php 文件成功运行了两次(顾名思义,它发送了一条 SMS 消息,实际上 2 条消息已成功发送),但 onSuccess 函数似乎只被调用了第二次。
JavaScript是否混淆了2个实例?
我认为这是因为status_id是一个全局变量,因此在调用其引用的回调中输入您的两个调用的上下文中:
onSuccess: function(transport){
if (transport.responseJSON.success) {
$(status_id).update("sent");
} else {
$(status_id).update("unable to send");
}
}
问题是,onSuccess 回调将在调用时编译,并在那时使用其上下文进行编译。在那一刻,status_id将等于"status_link_2",因为您对send_SMS("2");
的调用最有可能在第一个sms_send呼叫返回之前出现。
解决方案是:
- 在
- AJAX 调用中发送 ID,并在响应中检索它以构建status_id变量,或者
- 使用同步模式,以便 SMS1 返回在调用 SMS2 之前返回。
这是工作函数:
function send_SMS(id)
{
new Ajax.Request('sendSMS.php',
{
method:'post',
parameters: {link_id: id},
onCreate: function(){
$('status_link_' + id).update("sending...");
},
onSuccess: function(transport){
if (transport.responseJSON.success) {
$('status_link_' + id).update("sent");
} else {
$('status_link_' + id).update("unable to send");
}
},
onFailure: function(){
$('status_link_' + id).update("unable to send");
}
});
}
相关文章:
- 下拉选择可自动更改第二个下拉选择
- 为什么不'在JQuery中找到第二个css选择器的工作
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- CORS-重定向到第二个GET正在接收的页面
- 正则表达式与数字中的第二个点匹配
- 如何在react js中移动第二个组件
- 使用Javascript,如何显示<tr>在另一<tr>悬停时,隐藏第二个<tr>
- 关闭第二个事件源上的第一个事件源's onopen方法
- D3从嵌套的JSON中绘制第二个圆环图
- IE11中的第二个调用取消了第一个Fetch API调用
- 为什么我的Mongoose DB模式之一可能是“;强制转换为未定义的“;当它的实例被放置在第二个模式中时
- MyClass.prototype.settings={}被第二个实例化覆盖
- Jquery插件使用第二个实例's选项
- 为什么e.fn.e.init或x.fn.x.init(chrome调试器中的jQuery实例名称)中有第二个e或x
- 下拉列表更改事件直到第二个实例才触发
- 运行 AJAX 函数的多个实例 - 仅第二个实例更新
- css中类的第二个实例的快捷方式
- 如何在Mootools fireEvent函数的第二个参数中访问对象实例
- jQueryUI datepicker -当show()被调用时,第二个实例闪烁然后消失
- Reg表达式-在javascript中,我如何获得第二个实例