jquery getJSON function timing issue

后端 未结 4 1294
情深已故
情深已故 2021-01-12 08:57

I think my program is skipping result of JSON call. Is it possible to make a closure function here or make the program wait for JSON call to return?

function         


        
相关标签:
4条回答
  • 2021-01-12 09:21

    Yeap, username_not_duplicate just returns false immediately because getJSON is asynchronous (ie non-blocking). The return true statement just returns true from the response handler. Normally, you shouldn't do such a blocking calls you're trying to achieve. I suppose you can consider remembering of a state of the request somewhere globally.

    0 讨论(0)
  • 2021-01-12 09:29

    Drew's answer is nearly perfect, just missing one bracket and comma for IE.

    function username_not_duplicate(username) {
       var function_name = "get_username"; 
       var parameters = [username]; 
       var url = "camps/includes/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
       var rslt = false; 
       $.ajax({ 
             async: false, 
             url: url, 
             dataType: "json", 
             success: function(data) {
               if (data == true) {                   
                 rslt = true; 
               }
            }, 
        });
        return rslt; 
    }
    
    0 讨论(0)
  • 2021-01-12 09:33

    Another choice is to use a call back function and pass it to the function that executes the getJSON as:

    //this is the function that executes my getJSON
    //callback is the name of my callback function
    function getMyData( callback ){
    
      //here you do your getJSON call
      $.getJSON(url, function(items){
    
        //do your stuff here
    
        //call your function here (at the end)
        callback();
    
      });
    
    }
    

    This way your callback function will be called at the end of the getJSON call.

    0 讨论(0)
  • 2021-01-12 09:36

    The $.getJSON() API call is asynchronous. You can make it synchronous by using $.ajax() this way:

    function username_not_duplicate(username) {
       var function_name = "get_username";
       var parameters = [username];
       var url = "/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
       var rslt = false;
       $.ajax({
         async: false,
         url: url,
         dataType: "json",
         success: function(data) {
           if (data == true) {     
             rslt = true;
           }
         }
       });
       return rslt;
    }
    
    0 讨论(0)
提交回复
热议问题