如何在jquery中请求https api?

时间:2017-03-16 08:39:05

标签: jquery ajax https

我有一个简单的ajax请求:

$.ajax({url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=stuff&callback=JSON_CALLBACK',success: function(data){
console.log(data);
}});

当我手动打开链接时,我得到了我想要的对象,但没有通过ajax请求。问题是,如果api地址是http,它就可以工作。可以这样告诉我为什么会这样,以及我如何绕过它?

4 个答案:

答案 0 :(得分:0)

您可以使用gethttps://api.jquery.com/jquery.get/

轻松管理
$.get( "https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=stuff&callback=JSON_CALLBACK", function( data ) {
  console.log(data);
});

答案 1 :(得分:0)

首先你应该发送一个GET请求,而不是POST。然而,更大的问题是您需要检索JSONP数据,而不是JSON。

为此,您可以使用$.ajax()并使用适当的设置:

$.ajax({
  url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=stuff',
  dataType: 'jsonp',
  jsonpCallback: 'JSON_CALLBACK',
  success: function(data) {
    console.log(data);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:0)

您需要记住指定您正在使用JSONP。

$.ajax({
	url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=stuff&callback=?',
	success: function(data){
		console.log(data);
	},
	dataType: 'jsonp',
        jsonpCallback: 'JSON_CALLBACK'
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 3 :(得分:0)

尝试将'jsonp'作为数据类型的选项添加到您的ajax设置中,例如:

$.ajax({
  url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search& gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=stuff&callback=JSON_CALLBACK',
  dataType: 'jsonp',
  success: function(data){
    console.log(data);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>

编辑:要明确,你也可以使用$ get,但它只是一个速记版本:

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

$ ajax使用'GET'作为默认请求方法。