2013-10-03 4 views
0

После прочтения различных примеров на StackOverflow я написал эту функцию:JQuery запроса междоменного возвращает «неопределенного»

function showGetResult(crossDomainUrl) { 
    $.ajax({ 
     url: crossDomainUrl, 
     type : 'GET', 
     crossDomain: true, 
     success: function (data) { 
      debug(data); 
      return data; 
     } 
    }); 
} 

и назвал его с помощью этой

alert(showGetResult(crossDomainUrl)); 

Но всего это я получаю «undefined» , это используется в расширении веб-браузера внутри контент-скрипта.

+0

точной копии [Как вернуть ответ от вызова AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-a-ajax-call) – Bergi

+0

Возможный дубликат [Как вернуть текст ответа AJAX?] (Http://stackoverflow.com/questions/1225667/how-to -return-ajax-response-text) – Quentin

+0

Хотя подобное и не касается моей проблемы, как многие другие примеры здесь, см. мой комментарий - «Спасибо, что это работает, но мне нужно захватить javascript-файл. Я пробовал значения типа данных jsonp, script и html и все не удалось. see - jsfiddle.net/t syGj " – Stacked

ответ

0

Это связано с тем, что запрос Ajax выполняется асинхронно. return data ничего не делает. Вы можете изменить его (обновленный, чтобы отразить запрос в комментариях, чтобы иметь возможность скачать скрипт):

function showGetResult(crossDomainUrl) { 
    return $.ajax({ 
     url: crossDomainUrl, 
     type : 'GET', 
     dataType: 'script', 
     crossDomain: true 
    }); 
} 

showGetResult('http://code.jquery.com/ui/1.10.3/jquery-ui.js') 
    .done(function(data) { 
     alert("success: " + data); 
    }) 
    .fail(function(jqXHR, textStatus, ex) { 
     alert("failed: " + textStatus); 
    }); 

Для вызова на самом деле работать кросс-домен, вам нужно будет использовать JSONP или сценарий. Прочтите это wiki для получения дополнительной информации о политике одинакового происхождения. Обратитесь к this answer за дополнительной информацией об использовании jsonp.

Код выше будет впрыснуть загруженный JScript в йот и выполнить его.

+0

Я тестировал это в своем коде, но предупреждение не срабатывает, то же самое с http://jsfiddle.net/UmxRr/? – Stacked

+0

Как и в вашем исходном коде, был обработан только успех. Я добавил обработчик сбоя, см. Http://jsfiddle.net/UmxRr/2/ – mhu

+0

Но почему это вообще не срабатывает? – Stacked

-1

$.ajax() настроить запрос и сразу же вернуться, поэтому функция возвращается до завершения запроса. Укажите функцию для вызова по завершении запроса с помощью success.

function showGetResult(crossDomainUrl) { 
    $.ajax({ 
     url: crossDomainUrl, 
     type : 'GET', 
     crossDomain: true, 
     success: showData 
    }); 
} 

function showData(data){ 
    debug(data); 
    return data; 
} 
showGetResult(crossDomainUrl); 

см http://jsfiddle.net/5J66u/8/ - (обновлено, чтобы указать JSONP и лучший URL для него)

+0

Спасибо, это работает, но мне нужно захватить файл javascript.Я пробовал значения типа данных jsonp, script и html, и все не удалось. see - http://jsfiddle.net/tsyGj/ – Stacked

+0

Функция showGetResult по-прежнему будет возвращать 'undefined', не имеет значения, что' showData' возвращается. – Quentin

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