Ajax谷歌融合表请求不在IE中运行,但在其他浏览器中运行

时间:2013-05-03 22:56:12

标签: ajax internet-explorer google-fusion-tables

我是javascript的初学者,通过在线搜索和大量试验和错误将以下代码拼凑在一起。我有简单的数据位于Google Fusion Tables中,我希望能够从表中提取数据以用于方程式。我能让它工作的唯一方法是在非异步模式下使用JQuery / Ajax。

代码执行我想在非Internet Explorer浏览器中执行的操作,但在MSIE8上失败(调试器显示它卡在VsGM函数内的TestJax变量中。

有没有办法在IE中实现这项功能?我完全走错了路,如果是这样,有更好的方法来检索这些数据(仅限客户端编程)?

这是我的代码:

<html>
<head>
<title>PSHA Output Page</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script
    src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
</script>

<script type="text/javascript"
  src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDTvatTw0U-rSCpen_FnOMMk0a5Pggb0Os&sensor=false">
</script>

<script>
function myNumspull(myx,myy,vstable) {

    var query = "SELECT * FROM " + vstable+" WHERE Lat="+myy+" AND Lon="+myx;
    var encodedQuery = encodeURIComponent(query);
var VsGM, Lon, Lat, rows;
    // Construct the URL
    var url = ['https://www.googleapis.com/fusiontables/v1/query'];
    url.push('?sql=' + encodedQuery);
    url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');

    var myJax = TestJax(url, callback); 

return myJax;
}



var callback = function(data, textStatus, xhr)
{
console.log ('from callback function '+myFunction(data, textStatus));
myFunction(data, textStatus);
}

var TestJax = function(url, cb) {
var data = 'Input values';
  $.ajax({
      url: url.join(''),
  async: false,
  cache: false,
      dataType: 'text',
     success: cb
    });
console.log(VsGM,isNaN(VsGM));
return VsGM;
}



function myFunction(data, status) {
        var rows = data.split(" ");
          Lon = rows[18]; // Longitude
          Lat = rows[21]; // Latitude
          VsGM = rows[24]; //vs

    console.log ('from myFunction'+ Lon, Lat, VsGM);

}

</script></head>
<body><script>

var VsTable = new Object();
VsTable['360'] = '1jN5wsiRuJwvK3dQA9ZK_5yW4r1NuhlzC-3jb9wo';
var x1 = -121.50;
var y1 = 38.50;
var k = '360';

var testnumber = myNumspull(x1,y1,VsTable[k]);

document.write ('results = '+testnumber);

</script></body></html>

2 个答案:

答案 0 :(得分:0)

可能是因为console.log()调用。

在IE中,您必须删除或注释掉console.log()行或多次不处理。 log()是'console'对象的一种方法,在IE中,在打开Developer Tools之前没有定义控制台对象(按F12打开工具)。

如果您在执行JavaScript之前打开了开发人员工具,那么它就不会出现此问题。此外,您可以定义一个虚拟/回退console.log()对象和方法,供JavaScript在浏览器当前没有定义控制台对象时使用(当开发人员工具未打开时)。有关一些代码,请参阅此StackOverflow问题:What happened to console.log in IE8?

答案 1 :(得分:0)

我知道这是一个老问题,但我在Internet Explorer 8和9中遇到了同样的问题,所以我分享了解决方案。

ajax在IE8和IE9中返回错误。 这是因为IE试图下载文件而不是简单地阅读它。

所以在你的ajax请求中,你只需要指定dataType,在这种情况下是jsonp。

$.ajax({
  type: "GET",
  async: false,
  cache: false,
  dataType: 'jsonp',
  url: query,
  success: function(e) { 
    //...       
  },
  error : function(e) {
    //...        
  } 
});
相关问题