在ajax成功中访问javascript变量

时间:2015-06-09 14:03:34

标签: javascript jquery ajax

        var flag = false; //True if checkbox is checked
        $.ajax(
            ... //type,url,beforeSend, I cannot able to access flag here
            success: function()
            {
              //I cannot able to access flag here
            }
        );

在ajax中,如果我尝试访问flag,则表示未定义。我如何在ajax函数中使用它?

任何想法?

flag和ajax都是函数体。该功能内不存在任何其他内容。

2 个答案:

答案 0 :(得分:4)

如果您通过引用创建变量,则可以访问该变量。 Javascript中的所有对象都是引用值,只是原生值不是(例如; int,string,bool等...)

因此,您可以将标志声明为对象:

    var flag = {}; //use object to endure references.
    $.ajax(
        ... //type,url,beforeSend, I cannot able to access flag here
        success: function()
        {
          console.log(flag) //you should have access
        }
    )

或强制成功功能获得您想要的参数:

var flag = true; //True if checkbox is checked
    $.ajax(
        ... //type,url,beforeSend, I cannot able to access flag here
        success: function(flag)
        {
          console.log(flag) //you should have access
        }.bind(this, flag) // Bind set first the function scope, and then the parameters. So success function will set to it's parameter array, `flag`
    )

答案 1 :(得分:0)

这是一种方法。 beforeSend回调选项使您可以访问jqXHR对象和ajax设置对象。

您无法在错误附加中使用caturl,因为它不会与请求抛出错误同步。

 $.ajax({
    /* url, data ...& other opts*/
    beforeSend:function( jqXHR, settings){
        /* add url property and get value from settings (or from caturl)*/
         jqXHR.url= settings.url;
   },
   /* error to be deprecated in jQuery 1.8 , superseded by "fail" */
   error: function(jqXHR, , textStatus, error){
       var url=jqXHR.url;
     /* replace caturl with url in your append */ 
     $('#showdata').prepend("ERROR : '" + error + "' trying to access: " + url + "</br>");
   }