Возможно ли использовать ajax respone вне его?

Любой способ использованияdata_response вне$.post()?

Это часть кода, который я использую:

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        var response = data_response; //I need to access this variable outside of $.post()
    }
}, "json");

console.log(response); //response is not defined, is what I get for now
ОБНОВИТ

Нет ли способа получить этот ответ в глобальном масштабе?

Ответы на вопрос(5)

шего скрипта, если он будет выполнен, он будет выполнен немедленно, если нет, он будет выполнен после выполнения вызова ajax.

var XHR = $.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        // do somehing with data_response
    }
}, "json");


function doSomethingElse() {
    XHR.done(function(response) {
        console.log(response);
    });
}

У меня получилось так:

var returnedData = {}; //Declaring Object var not just var
$.ajax({
type: 'POST',
url: 'do.php',
data: { OP: "news_search", category: cat_id },
success: function (response) {
returnedData.result1=response;  //Add response into the Object created outside the ajax
},
dataType: "json"
});
console.log(returnedData);//inside it you can get returnedData.result1
Решение Вопроса

$.post выполняется асинхронно, поэтому при вызовеconsole.log, запрос AJAX все еще выполняется и еще не дал ответа. Это цель функции обратного вызова: предоставить код для запускапосл запрос завершен. Если вы двигаетесьconsole.log в функцию обратного вызова, она должна работать:

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        var response = data_response; //I need to access this variable outside of $.post()
        console.log(response);
    }
}, "json");

Обновить Если вы хотите, чтобы данные ответов были доступны глобально, вы можете объявить переменную в глобальной области видимости следующим образом:

var response = null;
$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
        response = data_response;
        console.log(response);
    }
}, "json");

Конечно, единственный контекст, в котором вы можете быть уверены, чтоresponse фактически заполнено значением в функции обратного вызова, переданной$.post после строкиresponse = data_response;. Если вы хотите использовать его на любом другом этапе сценария, вам сначала нужно проверить его значение; что-то вроде этого

if (response !== null)
{
    console.log(response);
}

Просто знайте, что этот код ничего не сделает, если вы положите его сразу после$.post вызов; он будет полезен только в том случае, если он выполняется после завершения запроса POST, в каком-либо другом асинхронном обратном вызове (возможно, в некотором роде событие взаимодействия с пользовательским интерфейсом).

 Will Vousden18 мая 2012 г., 21:15
@ w0rldart: Вы можете назначить его переменной глобальной области видимости, но вы должны быть осторожны с фактическим заполнением. Смотрите обновление.
 Alex18 мая 2012 г., 18:02
нет ли способа получить этот ответ в глобальном масштабе?

чтобы она находилась в той части кода, к которой вы можете обратиться:

var response;

$.post('do.php', { OP: "news_search", category: cat_id },
    function(data_response){
    response = data_response; 
    }
}, "json");

console.log(response); //response is now defined - It won't be populated yet though.

Как указывалось в приведенном выше коде, хотя ответ будет определен, он не будет заполнен к тому времени, когда вы вызовете console.log, однако, если вы получите доступ к переменной в какой-то момент после срабатывания обратного вызова, он будет заполнен.

Если вы пойдете по этому пути, вы, вероятно, захотите использовать шаблон модуля или замыкание, чтобы избежать размещения переменной ответа в глобальной области видимости (вы, вероятно, хотите сделать это в любом случае справедливости)

Шаблон модуля Крокфорда:http: //www.yuiblog.com/blog/2007/06/12/module-pattern

 Paul28 мая 2012 г., 16:19
Честно говоря, я думаю, что вопрос действительно в области определения переменных - то, что вы делаете с этой переменной, выходит за рамки вопроса. Очевидно, он не будет заполнен до тех пор, пока не сработает обратный звонок.
 Alnitak18 мая 2012 г., 15:55
нет,тольк разумный способ решить проблему с OP - использовать значение либо обратный вызов или в цепочке функций, вызываемых обратным вызовом. Просто «надеяться» на то, что в какой-то момент переменная будет заполнена, - рецепт катастрофы.

и вы должны быть уверены, что это значение заполняется сразу после вызова $ .post (), вы можете попытаться сделать вызов POST синхронным способом. Этого нельзя сделать с помощью $ .post (), но можно сделать с помощью $ .ajax ():

var returnedData = null;

$.ajax({
  type: 'POST',
  url: 'do.php', 
  data: { OP: "news_search", category: cat_id },
  success: function (response) {
            returnedData = response;
        },
  dataType: "text"
});

console.log(returnedData );
 Alex18 мая 2012 г., 18:01
не работает ...

Ваш ответ на вопрос