2012-07-04 61 views
0

我嘗試了一個Angular demo,想用jsonp來玩,所以我把相同的代碼粘貼到jsbin中,所以我可以問你們什麼是錯的。並注意它的工作。angularjs jsonp不工作localy

在我的開發站點再次嘗試完全相同的代碼。並且它不起作用。我可以看到webkit中的網絡日誌,我使用http代碼200獲得有效的json。但是沒有執行回調。

我結束了對相同的請求嘗試jQuery-Ajax,並且工作正常。我

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

這裏是不到風度工作localy http://jsbin.com/ojibel/edit#html,live我的代碼演示。

編輯:

我從html的切換到PHP擴展,並開始工作。所以它必須做一些與Apache?

回答

1
jQuery的API文檔

其提到

「然而,由於JSONP和跨域GET請求不使用XHR,在這些情況下傳遞給成功回調jqXHR和textStatus參數是不確定的。」

我修改您的代碼在http://jsbin.com/ojibel/3/edit

,如果你看到我創建了一個名爲的getData功能和相同的功能我傳遞的回調URL,因此我能夠在控制檯中顯示。

JSONP的工作方式是嘗試將URL添加爲腳本標記,並將URL的輸出視爲腳本,並且該代碼按原樣執行。所以如果你有回調 XYX輸出,你將有類似

XYZ(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 with $ templateCache,並且在html文件的底部有<script type="text/ng-template" id="http-hello.html">Hello, $http!</script>,它將填充緩存,請求的響應爲http-hello.html,因此如果您抓取/ http-hello .html,將不會向服務器發出請求,並且將使用緩存的內容調用回調。