2014-10-08 64 views
0

我想用angularjs通過jsonp調用我的一個webservices。如何使用jsonp獲取我的webservice的結果?

當我在瀏覽器中直接調用http://example.com/files?callback=JSON_CALLBACK,我得到:

["folder1", "folder2"] 

當我從angularjs撥打:

$http.jsonp('http://example.com/files?callback=JSON_CALLBACK') 
    .success(function(data){ 
     console.log(data); 
     $scope.folders = data; 
}); 

的console.log不會出現.... 上午什麼我做錯了?

必須我的web服務返回

JSON_CALLBACK(["folder1", "folder2"]) 

?我應該在我的API中手動執行嗎?瀏覽器不會自動執行該操作?

+1

是的服務必須用來自GET參數'callback'的值包裝響應。 – dfsq 2014-10-08 12:44:17

回答

1

什麼你正在返回(["folder1", "folder2"])無效JSONP。 JSON結果必須通過javascript函數調用才能成爲有效的JSONP。

例如,當你使用這樣的網址:

http://example.com/files?callback=JSON_CALLBACK 

角將取代JSON_CALLBACK參數與角度的函數名(內部產生的),如:

http://example.com/files?callback=angular.callbacks._0 

你的服務器將那麼需要能夠讀取callback參數並返回如下結果:

angular.callbacks._0(["folder1", "folder2"]); 

這不是一個自動機制,您需要在您的Web服務器上實現該邏輯。

+0

好吧,我明白,那正是我的問題。我嘗試,然後標記解決 – emurb 2014-10-08 12:54:25

0

嘗試使用以下代碼段。

(function($) { 
var url = 'http://example.com/files?callback=JSON_CALLBACK'; 

$.ajax({ 
    type: 'GET', 
    url: url, 
    async: false, 
    jsonpCallback: 'jsonCallback', 
    contentType: "application/json", 
    dataType: 'jsonp', 
    success: function(data) { 
     console.dir(data); 
    }, 
    error: function(e) { 
     console.log(e.message); 
    } 
}); 

})(jQuery); 
+0

我收到「undefined」的錯誤情況爲e.message – emurb 2014-10-08 12:49:19

+0

是的,它的調用錯誤回調函數,因爲你返回無效的json字符串,這就是爲什麼代碼出現異常 – Amy 2014-10-08 12:51:34

+0

返回數據類似{「data」:[「folder1」, 「folder2」]} – Amy 2014-10-08 12:57:22

0

bmleite是對的,我不得不在我的API上實現這個邏輯。 在我的例子,我的服務器是由具有的Silex:

public function index() 
{ 
    $callback = $this->request->get('callback'); 
    $files = $this->app['file.manager']->getList(); 

    $response = new \Symfony\Component\HttpFoundation\JsonResponse(); 
    $response->setData($files); 
    $response->setCallback($callback); 

    return $response; 
} 

現在它完美的作品。謝謝。

相關問題