我不明白为什么下面的代码在FF中工作得很好,但在IE9中却不行。
脚本所做的是,当点击按钮时,它从表单中选择一些值,如街道,邮政编码和城镇,构建一个字符串,提交给google,并返回该地址的长度和长度(并将其放入表单中的两个字段中)
$("#google_coordinates").live("click", function(){
var string = encodeURIComponent($('#sAddressStreet1').val())+",";
if($('#sAddressStreet2').val() != ""){
string += encodeURIComponent($('#sAddressStreet2').val())+",";
}
string += encodeURIComponent($('#sAddressPostalcode').val())+",";
string += encodeURIComponent($('#sAddressTown').val())+",";
string += encodeURIComponent($('#sAddressCountryCode option:selected').text());
/* test with an alert - string shows fine in both FF and IE */
alert(string);
$.get("http://maps.googleapis.com/maps/api/geocode/xml?address="+string+"&sensor=false", function(xml){
$(xml).find('location').each(function() {
lat = $(this).find('lat').text();
lng = $(this).find('lng').text();
/* test with an alert - fine in FF not in IE */
alert(lat + ',' + lng);
$("#sAddressLatitude").val(lat);
$("#sAddressLongitude").val(lng);
});
});
return false;
});
这个脚本在这个例子中提交的url是:=1363342459585">http://maps.googleapis.com/maps/api/geocode/xml?address=Servicev%C3%A4gen%207,311%2033,Falkenberg,Sweden&sensor=false&=1363342459585
我已经尝试将缓存更改为false,使用$。Ajax代替$。通过放入一些警报进行测试,但我似乎无法进入$。得到函数
我已经尝试改变MIME类型,建议在这里http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests,但这没有帮助。
有什么想法吗?
编辑:甚至尝试从谷歌json结果,看看问题是否在于XML,但这也不起作用。
$.ajax({
type: "GET",
url: "http://maps.googleapis.com/maps/api/geocode/json?address="+string+"&sensor=false",
dataType: "json",
cache: false,
success: function(json){
alert("hiero");
lat = json.results[0].geometry.location.lat;
lng = json.results[0].geometry.location.lng;
$("#sAddressLatitude").val(lat);
$("#sAddressLongitude").val(lng);
}
});
因为要执行跨域请求,所以浏览器需要支持这一点。大多数现代浏览器(如FF和Chrome)都支持它,但IE9只在满足特定要求时才支持它。
以下是微软对此的说法,包括一些如何使其工作的指针(如果微软页面上提到的所有要求都可以满足)。
您是否尝试在$。ajax参数?
查看此处的crossDomain参考:bool参数:http://api.jquery.com/jQuery.ajax/
它应该在浏览器之间无缝工作。
编辑
检查jQuery的源代码后,似乎没有提到XDomainRequest (ie8/9支持CORS的方式),所以我不确定它是否有效。否则,如果您真的想支持这些,可以在$周围创建一个包装器。如果浏览器== ie9或ie8.