Jquery ui jQuery UI自动完成在IE JSON中不起作用
这是一个让我们有点疯狂的例子。我们从jQueryUI页面实现了JSONP的示例脚本,然后就在它旁边,我们编写了一个修改最少的版本 这是踢球的人。jQueryUI的脚本可以在IE中使用,而我们的脚本只能在Firefox、Chrome等中使用 唯一的区别是我们的数据源 当我们将数据发送给客户时,是否需要对其执行一些神奇的操作?我们已经尝试过将其包装在命名函数中,等等Jquery ui jQuery UI自动完成在IE JSON中不起作用,jquery-ui,jsonp,jquery-ui-autocomplete,Jquery Ui,Jsonp,Jquery Ui Autocomplete,这是一个让我们有点疯狂的例子。我们从jQueryUI页面实现了JSONP的示例脚本,然后就在它旁边,我们编写了一个修改最少的版本 这是踢球的人。jQueryUI的脚本可以在IE中使用,而我们的脚本只能在Firefox、Chrome等中使用 唯一的区别是我们的数据源 当我们将数据发送给客户时,是否需要对其执行一些神奇的操作?我们已经尝试过将其包装在命名函数中,等等 <!doctype html> <html> <head> <meta http
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title></title>
<link rel="stylesheet" href="/css/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
</head>
<body>
<script>
function foo (str) {
//console.log(str);
return str;
}
$(function() {
function log( message ) {
$( "#street1" ).val( message );
}
$( "#street1" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://192.168.50.78/melissa/address/linux/interfaces/php/api/autoAddrSuggest_new_dual2.php",
dataType: "json",
data: {
format: 'json',
action: 'address1request',
zipcode: '43026',
address: request.term
},
success: function( data ) {
console.log( data.addresses );
response( $.map( data.addresses, function( item ) {
return {
label: item.address,
value: item.address
};
}));
},
error: function(data) {
console.log(data);
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
$( "#city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function( data ) {
console.log( data.geonames );
response( $.map( data.geonames, function( item ) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
};
}));
}
});
},
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.label :
"Nothing selected, input was " + this.value);
},
open: function() {
$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
},
close: function() {
$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
}
});
});
</script>
<div id="wrap">
<div id="main">
<div>
<form id="enroll" name="enroll" method="post" enctype="multipart/form-data">
<div>
<p class="left">
<span> </span><br/>
<input id="street1" />
<input id="city" />
</p>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
这是我们服务器的输出
{"addresses":[{"address":"3666 LACEY WOODS PARK"},{"address":"3666 LACON RD"},{"address":"3666 LAKESTONE CIR"},{"address":"3666 E LINKS CIR"}]}
JSONP协议是一种跨站点脚本临时协议。
当您查询的域和用于下载页面的域是两个不同的域时,需要使用此选项。我猜您的问题是浏览器不允许您直接请求192.168.50.78,因为您的原始域是其他域。请注意使用json与远程jsonp使用jsonp的区别。
控制台。除非打开开发人员工具或实施解决方案,否则日志在IE中不起作用:
取出或注释掉所有控制台。记录引用或点击F12或使用解决方法,然后在IE中重试
IE中的F12将显示任何js错误,对于解决此类问题非常有用,即使不是控制台.log
语句导致问题。您确实需要用回调函数返回响应。您需要读取回调
(或类似)参数,并将响应封装在对该函数的调用中。您能提供一个示例吗?我们的API应该准确地用什么响应客户机?你的意思是api的响应应该是:“myfunctionname(…json…”,而不仅仅是“json”。如果你在提供页面的同一个域中发出请求,那么也许我应该备份并说你不需要JSONP。是这样吗?实际上,代码中似乎没有使用JSONP。你在页面上有任何错误吗?你的意思是IE不允许吗?同样,这两个请求都是向其他域发出的,但一个有效,一个无效。是的,浏览器(不管是IE、Safari还是Chrome)不允许直接向不同于源域的域发出AJAX请求。在这种情况下,远程jsonp示例使用jsonp方案这一事实是决定性的,这就是它工作的原因。您必须在服务中实现jsonp端点,并使用jsonp执行请求。有关如何执行此操作的更多信息,请参见JQuery jsonp。CORS还可以应用另一种技术:很奇怪,因为在它的JSON版本中,除了IE之外,它在所有浏览器中都能工作。JSONP需要一个带有回调名称的包装器,但我不能很好地理解它。你在测试哪个版本的IE?8和9。本机json在除IE 8或9之外的所有浏览器中都能完美工作。然后什么也没有了,很遗憾(没有出错)。我们已经知道F12的诀窍了。
{"addresses":[{"address":"3666 LACEY WOODS PARK"},{"address":"3666 LACON RD"},{"address":"3666 LAKESTONE CIR"},{"address":"3666 E LINKS CIR"}]}