我无法调用同一个Ajax.Request函数的多个实例。 (我正在使用Prototype框架)。这是功能:
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");
}
});
}
如果我用两个不同的id号称这个函数两次,即:
send_SMS("1");
send_SMS("2");
onSuccess函数只更新第二个ID。 sendSMS.php文件成功运行两次(顾名思义它发送了一条SMS消息,确实发送了2条消息),但onSuccess函数似乎只是第二次被调用。
javascript是否会混淆2个实例?
答案 0 :(得分:1)
我认为这是因为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调用返回之前到来。
解决方案是:
答案 1 :(得分:0)
这是工作职能:
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");
}
});
}