访问Prototype中onSuccess函数内的值集

时间:2009-08-07 05:51:39

标签: javascript ajax prototypejs

我正在使用Ajax和Prototype库。

这是我调用Ajax函数的函数。

function Testfn()
{

    var DateExists = '';

    new Ajax.Request('testurl',{
            method: 'post',
            parameters: {param1:"A", param2:"B", param3:"C"},
            onSuccess: function(response){
            //DateExists = response.responseText;
                            DateExists = 1;
        }
        });
    // I want to access the value set in the onsuccess function here
    alert(DateExists);

}

当我提醒DateExists值时,我得到空值而不是我的Ajax调用的onsuccess函数中设置的值,这是怎么回事?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

AJAX中的A代表异步。这意味着只要您使用new Ajax.Request分派该Ajax请求,请求就会发送到服务器并立即将控制权返回给您的脚本。因此,alert(DateExists)将显示“您最初设置的内容。”

要从AJAX请求返回后查看DateExists的值,必须在onSuccess()方法中移动它。

示例:

function Testfn() {

    var DateExists = '';

    new Ajax.Request('testurl', {
      method: 'post',
      parameters: {param1:"A", param2:"B", param3:"C"},
      onSuccess: function(response){
        DateExists = response.responseText;
        alert(DateExists);
      }
    });
}

答案 1 :(得分:1)

A JAX请求结束时异步执行onSuccess回调,因此警告在调用回调之前触发

您应该在回调中使用您的回复,或者如果您愿意,还可以创建另一个功能:

new Ajax.Request('testurl',{
            method: 'post',
            parameters: {param1:"A", param2:"B", param3:"C"},
            onSuccess: function(response){
                        var dateExists = response.responseText;
                        doWork(dateExists);
                        // or alert(dateExists);
                }
        });

function doWork (data) {
    alert(data);
}

答案 2 :(得分:0)

CMS完全正确。解决方案是调用需要从AJAX回调中访问DateExists的javascript,如下所示:

function Testfn()
{

  var DateExists = '';

  new Ajax.Request('testurl',{
    method: 'post',
    parameters: {param1:"A", param2:"B", param3:"C"},
    onSuccess: function(response){
      //DateExists = response.responseText;
      DateExists = 1;
      doTheRestOfMyStuff(DateExists);
    }
  });
  // I want to access the value set in the onsuccess function here
  function doTheRestOfMyStuff(DateExists)
  {
    alert(DateExists);
  }
}