2012-02-25 3 views
0

Возможные Дублировать:
Synchronous calls with jqueryВозвращаемое значение из функции с помощью AJAX вызова

Я пытаюсь вернуть значение из функции, содержащей вызов Ajax (см код ниже).

Переменная returnValue не определена при оповещении и при ее возврате. Может ли кто-нибудь помочь?

function getLightboxImages(){ 

    var returnValue; 

    jQuery.ajax({ 
     url: "http://test.domain.com/WebService.svc/GetAllI", 
     data: { id: "2", hash:"MaD01" }, 
     async: false, 
     dataType: "jsonp", 
     success: function (result) { 
      returnValue = result 
     } 
    }); 

    alert(returnValue); 

    return returnValue; 
} 
+0

Функция успеха вызывается асинхронно, когда запрос AJAX завершен. – mikeycgto

ответ

2

Предупреждение должно быть помещено в функцию успеха, так как это вызвано, когда возвращается ajax. То, что вы выше, отправит запрос, а затем попытается предупредить возвращаемое значение до завершения запроса.

+0

@ Xander: Да, это асинхронно. Невозможно выполнить синхронный запрос JSONP. – Guffa

0

Невозможно выполнить синхронные запросы JSONP.

Используйте функцию обратного вызова вместо возврата:

function getLightboxImages(callback) { 
    jQuery.ajax({ 
    url: "http://test.domain.com/WebService.svc/GetAllI", 
    data: { id: "2", hash:"MaD01" }, 
    dataType: "jsonp", 
    success: function (result) { 
     callback(result); 
    } 
    }); 
} 

Использование:

getLightboxImages(function(result){ 
    alert(result); 
}); 
+0

@ Xander: Да, это асинхронно. Если вы делаете запрос JSONP, параметр 'async' игнорируется, так как вы * не можете * сделать синхронный запрос JSONP. – Guffa

1
function getLightboxImages(){ 
    var returnValue; 

    jQuery.ajax({ 
     url: "http://test.domain.com/WebService.svc/GetAllI", 
     data: { id: "2", hash:"MaD01" }, 
     async: false, 
     dataType: "jsonp", 
     success: function (result) { 
      returnValue = result 
     } 
    }); 

    alert(JSON.stringify(returnValue)); 

    return returnValue; 
} 

запросы Междоменные может быть только асинхронной, так как запросы междоменное полагаться на динамический тег сценария , который никогда не может быть синхронным и должен использовать тип данных json и метод GET.

Для получения того же запроса просьба переназначить json-объекты перед предупреждением, например, выше!

2

попробуйте этот код, для JSONP вам нужно использовать функцию обратного вызова, а не метод успеха.

$.ajax({ 
     url: 'http://test.domain.com/WebService.svc/GetAllI', 
     type: 'GET', 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     jsonp: "callback", 
     jsonpCallback: "jsonpCallbackfunction", 
     error: function() { 
      alert("Error in Jsonp"); 
     } 
    }); 

    function jsonpCallbackfunction(responseData) { 
     alert(responseData); 
    } 

http://cmsnsoftware.blogspot.com/2012/02/how-to-use-cross-domain-ajax-request.html#0

Смежные вопросы