Как я могу получить доступ к данным, возвращенным из вызова jquery ajax?вне $ .ajax (...); - PullRequest
7 голосов
/ 07 декабря 2010

Как получить доступ к данным, полученным при вызове jquery ajax. За пределами $ .ajax ().

//Reloads the inital page
function jobexist( jobname )
{
   var dataString = 'jobname=' + jobname;
   var found = false;

   $.ajax(
   {
      type: 'POST',
      url: "/genode/jobs/jobexist.m",
      data: dataString,
      dataType: 'json',
      success: function(data)
      {
         alert("Passed");
         if( data.result == 0 )
         {
            found = true;
          }else{  
            found = false; 
          }
      },
      error: function( data )
      {
         alert("Login Failed");
         return -1; //alert(data);
      }
   });

   if( found == true )
   {
       alert("found!")'
       return true;
   }else{
       alert("not found!");
       return false;
    }
}



if( !jobexist(jobname) )
{
    $("#jobname_error").text("This jobname already exist.");
    $("#jobname_error").show();
    return false;
}

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Ajax работает асинхронно, поэтому оператор if if found будет обработан до завершения вызова ajax.

Что вы можете сделать, это вызвать функцию изнутри вашей функции успеха ajax и передать ей любые данные, которые вы хотите

function found(data){

   if( data.result == 0 )
   {
       alert("found!")
       return true;
   }else{  
       alert("not found!");
       return false;
   }
}

$.ajax(
   {
      type: 'POST',
      url: "/genode/jobs/jobexist.m",
      data: dataString,
      dataType: 'json',
      success: function(data)
      {
         alert("Passed");
         found(data);
      },
      error: function( data )
      {
         alert("Login Failed");
         return -1; //alert(data);
      }
   });
1 голос
/ 28 марта 2011

JavaScript является асинхронным, что означает, что вам следует немного изменить свой образ мышления и отправиться в крутое путешествие в странный мир обратных вызовов и замыканий. Вы можете просто выставить некоторую переменную за пределы области своего вызова ajax и присвоить ей данные, но это не совсем то, что вы хотите сделать.

То, что вы хотите сделать, это:

  1. определить функцию обратного вызова: function afterAjax() { $("#jobname_error").text("This jobname already exist."); $("#jobname_error").show(); return false; };

  2. переопределить вашу функцию, ответственную за ajax, чтобы принимать callbackFn в качестве второго параметра: function jobexist( jobname, callbackFn ) {

  3. передать вашу функцию обратного вызова при выполнении ajax-ответственной функции: jobexist(jobname, afterAjax)

  4. выполнить этот обратный вызов, когда придет время: if( data.result == 0 ) { callbackFn(); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...