Я хочу использовать jQuery ajax для получения данных с сервера.
Я хочу поместить определение функции обратного вызова успеха вне блока .ajax()
, как показано ниже. Нужно ли мне объявить переменную dataFromServer
, как показано ниже, чтобы я мог использовать возвращенные данные из функции обратного вызова?
Я'видел, что большинство людей определяют обратный вызов успеха внутри блока .ajax()
. Так будет ли следующий код правильным, если я хочу определить обратный вызов успеха снаружи?
var dataFromServer; //declare the variable first
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData(dataFromServer)
})
}
function handleData(data) {
alert(data);
//do some stuff
}
В "Новой" и способ сделать это с помощью jQuery 1.5 (январь 2011) - использовать отложенные объекты вместо передачи "успех" обратного вызова. Вы должны return результат $.AJAX
и затем использовать .сделано
, .Фаиль и методы, чтобы добавить _outside обработчики
$.Аякс` call_.
function getData() {
return $.ajax({
url : 'example.com',
type: 'GET'
});
}
function handleData(data /* , textStatus, jqXHR */ ) {
alert(data);
//do some stuff
}
getData().done(handleData);
Это decouples обратного вызова обработки из обработки AJAX, позволяет добавить несколько обратных вызовов, вызовы недостаточность, и т. д., И все это без необходимости изменять функции оригинальных метода GetData ()`. Разделяя функциональность Ajax в набор действий, после завершения а хорошая вещь!.
Deferreds и позволяют гораздо легче синхронизации нескольких асинхронных событий, которые вы можете'т легко сделать просто с успеха
Например, я мог бы добавить несколько обратных вызовов обработчика ошибок, и подождите пока таймер пройдет, прежде чем продолжить:
// a trivial timer, just for demo purposes -
// it resolves itself after 5 seconds
var timer = $.Deferred();
setTimeout(timer.resolve, 5000);
// add a done handler _and_ an `error:` handler, even though `getData`
// didn't directly expose that functionality
var ajax = getData().done(handleData).fail(error);
$.when(timer, ajax).done(function() {
// this won't be called until *both* the AJAX and the 5s timer have finished
});
ajax.done(function(data) {
// you can add additional callbacks too, even if the AJAX call
// already finished
});
Другие части используется jQuery использовать отложенные объекты тоже - вы можете синхронизировать jQuery анимации очень легко с помощью других асинхронных операций с ними.
Просто используйте:
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
Свойство success
требует только ссылки на функцию и передает данные в качестве параметра этой функции.
Вы можете получить доступ к функции handleData
таким образом из-за способа объявления handleData
. JavaScript будет анализировать ваш код на предмет объявления функций перед его запуском, поэтому вы сможете использовать функцию в коде, который находится до фактического объявления. Это известно как hoisting.
Однако это не относится к функциям, объявленным подобным образом:
var myfunction = function(){}
Они доступны только тогда, когда интерпретатор передал их.
См. этот вопрос для получения дополнительной информации о двух способах объявления функций.
Я не знаю, почему вы определяете параметр за пределами сценария. Что является ненужным. Ваша функция обратного вызова будет вызвана с возвратом данных в автоматически параметра. Вполне возможно, чтобы определить ваш обратного вызова за пределами успех:
т. е.
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
function handleData(data) {
alert(data);
//do some stuff
}
функция handleData будет называться и параметр, передаваемый ему функцию AJAX.
Попробуйте переписать обработчик успеха на:
success : handleData
Свойство success метода ajax требует только ссылки на функцию.
В своей функции handleData вы можете принимать до 3 параметров:
object data
string textStatus
jqXHR jqXHR
Я бы написал:
var handleData = function (data) {
alert(data);
//do some stuff
}
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
после нескольких часов играть с ним и практически стали тусклыми. чудо пришло ко мне, это работает.
<pre>
var listname = [];
$.ajax({
url : wedding, // change to your local url, this not work with absolute url
success: function (data) {
callback(data);
}
});
function callback(data) {
$(data).find("a").attr("href", function (i, val) {
if( val.match(/\.(jpe?g|png|gif)$/) ) {
// $('#displayImage1').append( "<img src='" + wedding + val +"'>" );
listname.push(val);
}
});
}
function myfunction() {
alert (listname);
}
</pre>
Вы Don'т должны объявить переменную. Функция успехи "Аякса" автоматически занимает до 3 параметров: функция( объект данных, строка textStatus, jqXHR jqXHR )`
В компоненте я.е угловой JS код:
function getData(){
window.location.href = 'http://localhost:1036/api/Employee/GetExcelData';
}