jsonp的全写是 json with padding,其出现是为了解决各主浏览器的之间的同源策略的问题,一般来说ServerA 域下面的页面是没有办法与非 ServerA 下面的资源进行沟通,而 Html 的<script>元素是个例外,利用 <script> 这个开源策略,网页可以从其他来源动态获取 json数据,而这种模式就是所谓的 JSONP,用 jsonp 抓到并不是真正意义上 的 json 而是任意的 javascript ,它是直接通过 javascript 编译器编译而不是 json 解释器。更多关于json的知识请点击:http://www.cnblogs.com/foodoir/p/5894760.html查看
既然书上没有写,那就去网上搜索资源。这里截取一段和文章前面有关的信息的代码:
$.ajax({
type: "get",
async: false,
url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998",
dataType: "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
success: function(json){
alert(json.price + json.tickets + ' 张。');
},
error: function(){
alert('fail');
}
});
通过这段代码来修改我们自己的代码:
$.ajax({
type: "GET",
url: "http://api.bing.com/qsonhs.aspx?type=cb&q=" + searchText,
dataType: "jsonp",
jsonp: 'cb',
success: function(data) {
var d = data.AS.Results[0].Suggests;
var html = ""; for(var i = 0; i < d.length; i++) {
html += "<li>" + d[i].Txt + "</li>";
}
$("#search-result").html(html);
$("#search-suggest").show().css({
top: $("#search-form").offset().top + $("#search-form").height() + 10,
left: $("#search-form").offset().left,
position: "absolute",
});
}
})
更多思考:我们可以在前面增加一些判断,让我们的效果实现起来更完美
if(data == null) {
$("#search-suggest").hide();
return false;
}
if(data.AS == null) {
$("#search-suggest").hide();
return false;
}
if(data.AS.Results == null) {
$("#search-suggest").hide();
return false;
}
if(data.AS.Results[0] == null) {
$("#search-suggest").hide();
return false;
}
if(data.AS.Results[0].Suggests == null) {
$("#search-suggest").hide();
return false;
}
经过测试前面的代码,发现还有不足,进一步修改代码:










