今天,在阅读了古瑟尔目录文档之后,我尝试使用jquery访问coursera。我编写了一个代码并得到了一个错误No 'Access-Control-Allow-Origin' header is present on the requested resource.,一些谷歌也这样做了,并发现Jsonp可以用来进行跨域请求。因此,我只是使用一个$.ajax函数向这个url发出请求,或者说这个简单url和其他一些这样的urls,但是失败了。
url上的数据类似于{"elements":[{"id":2,"shortName":"ml","name":"Machine Learning","links":{}}],"linked":{}}。
我写了以下代码。
$(document).ready(function() {
$.ajax({
url: "https://api.coursera.org/api/catalog.v1/courses/2",
type: "GET",
dataType: 'jsonp',
jsonpCallback: 'localJsonpCallback',
contentType: 'application/json',
success: function(){
alert("success");
},
error:function(jqxhr, textStatus, error){
alert("textStatus : " + textStatus + "\n error" + error);
}
});
function localJsonpCallback(data) {
alert("localJsonpCallback : " + data);
}
});上面的代码失败并转到错误处理程序,其打印错误是textstatus: parseError和Error: localJsonpCallback was not called。我不知道密码出了什么问题。此外,在控制台中,我在使用url Uncaught SyntaxError: Unexpected token :时得到了错误2?callback=localJsonpCallback&_=1418037208234:1和https://api.coursera.org/api/catalog.v1/courses/2。
是否有必要使用jsonp回调函数?我们不能处理成功处理程序中的直接响应吗。
发布于 2014-12-08 12:14:37
这行得通
您可以在success回调中直接处理
$(document).ready(function() {
$.ajax({
url: "https://api.coursera.org/api/catalog.v1/courses/2",
type: 'GET',
dataType: "json",
success: function(data) {
console.log(JSON.stringify(data,null,4));
}
});
});返回
{
"elements": [
{
"id": 2,
"shortName": "ml",
"name": "Machine Learning",
"links": {}
}
],
"linked": {}
}希望这能帮上忙
发布于 2014-12-08 11:49:03
试试这个:-
$(document).ready(function() {
$.getJSON("https://api.coursera.org/api/catalog.v1/courses?ids=2,3&fields=language,shortDescription&includes=sessions&fields=status&categories", function (response) {
alert(JSON.stringify(response));
},'jsonp');
});演示
发布于 2014-12-08 11:51:05
在我们的例子中,您不需要使用jsonp,您可以使用通常的ajax请求
$.ajax({
url: "https://api.coursera.org/api/catalog.v1/courses/2",
type: "GET",
dataType: 'json',
success: function (res) {
console.log(res);
},
error: function(jqxhr, textStatus, error) {
alert("textStatus : " + textStatus + "\n error" + error);
}
});演示:http://jsbin.com/payare/1/edit?js,console
https://stackoverflow.com/questions/27357022
复制相似问题