2012-07-04 2 views
0

Я опробовал одну из Angular demo и хотел играть с jsonp, и я не мог заставить ее работать, поэтому я вставлял один и тот же код в jsbin, поэтому я могу спросить вас, ребята, что с ним не так. , И обратите внимание, что это сработало.angularjs jsonp не работает localy

Пробовал тот же код снова на моем dev-сайте. и доза не работает. Я могу увидеть сетевой журнал в webkit, чтобы получить верный json с http-кодом 200. Но callback не выполняется.

Я закончил тем, что попробовал jQuery-Ajax по тому же запросу, и это сработало нормально. для меня

$(document).ready(function() { 
    $.getJSON('http://angularjs.org/greet.php?callback=?&name=Super%20Hero', function(data) { 
     console.log(data); // Works 
    }); 
}); 

Вот демо моего кода, dosn't работы, локальной http://jsbin.com/ojibel/edit#html,live.

EDIT:

я переключился с .html на .php расширение и он начал работать. так что он должен что-то сделать с apache?

ответ

1

в Jquery апи документ его упомянул, что

«Однако, так как JSONP и кросс-домен GET запросы не использовать XHR, в тех случаях параметры jqXHR и textStatus передается обратный вызов не определен.»

Я изменил код в http://jsbin.com/ojibel/3/edit

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

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

А (DATA_FROM_SERVER)

, которая будет таким же, как

<script>xyz(DATA_FROM_SERVER)</script> 
+0

, который отлично работает, но я не доволен им. Например, я не могу получить доступ к этим другим параметрам, например xhr.status и таким – Endless

+0

, если вы пытаетесь получить доступ к перекрестному домену, вы не можете получить доступ к xhr.status или любому другому обратному вызову. снова, пожалуйста, пойдите, хотя работа, что говорит jquery. ------------------- «Однако, поскольку JSONP и междоменные запросы GET не используют XHR, в этих случаях параметры jqXHR и textStatus, переданные на обратный вызов успеха, не определены «. Так что в сортировке нет способа получить их, выполняя кросс-домен. JSONP не является ajax. Кросс-домен AJAX вообще невозможен. вам нужно это понять. – gaurang171

1

Когда вы говорите, что это «не работает» , можете ли вы описать шаги, которые вы предпринимаете, и каков ожидаемый фактический результат?

Пожалуйста, обратите внимание, что в вашем примере вы используете $ HTTP с $ templateCache и в нижней части HTML-файла имеется <script type="text/ng-template" id="http-hello.html">Hello, $http!</script>, который будет заполнить кэш с ответом на http-hello.html запросов, так что если вы запрашиваете/HTTP-привет .html, запрос не будет отправлен на сервер, и вызов будет вызван с кэшированным контентом.

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