我掙扎了很多這樣的問題,所以希望這將幫助別人的未來:)
JSONP需要一個回調函數,一個常見的錯誤是調用返回JSON的URL,你會得到一個未捕獲SyntaxError:意外的標記:錯誤。相反,JSONP應該返回這樣的事情(不要在這個例子中得到掛在函數名):
angular.callbacks._0({"id":4,"name":"Joe"})
的documentation告訴你傳遞JSON_CALLBACK對URL的一個原因。這將被替換爲回調函數名稱來處理返回。每個JSONP請求都分配了一個回調函數,因此如果您執行多個請求,則可以通過angular.callbacks._1,angular.callbacks._2等處理它們。
考慮到這一點,你的要求應該是這樣的:
var url = 'http://myserver.com:8888/dosomething/[email protected]/arg2';
$http.jsonp(url + '?callback=JSON_CALLBACK')
.then(function (response) {
$scope.mydata = response.data;
...
然後AngularJS實際上將請求(更換JSON_CALLBACK):
http://myserver.com:8888/dosomething/[email protected]/arg2?callback=angular.callbacks._0
一些框架有JSONP支持,但如果你的api不會自動執行,你可以從querystring中獲取回調名來封裝json。 實施例是在Node.js的:
var request = require('request');
var express = require('express');
var app = express();
app.get('/', function(req, res){
// do something to get the json
var json = '{"id":4,"name":"Joe"}';
res.writeHead(200, {"Content-Type": "application/javascript"});
res.write(req.query.callback + '(' + json + ')');
res.end();
});
app.listen(8888);
是的,這是有效的。但我也面臨CORS問題。 –
看看這些幫助與CORS:http://stackoverflow.com/questions/13007187/i-cant-make-a-delete-with-cors-and-angularjs,https://github.com/angular/angular。 js/issues/934 –