0

私は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>
4

2 に答える 2

0

これは古い質問であることは理解していますが、Internet Explorer 8 と 9 で同じ問題が発生したため、解決策を共有しています。

ajax は IE8 と IE9 でエラーを返しました。これは、IE が単にファイルを読み取るのではなく、ダウンロードしようとしたためです。

したがって、ajax リクエストでは、この場合は jsonp である dataType を指定するだけです。

$.ajax({
  type: "GET",
  async: false,
  cache: false,
  dataType: 'jsonp',
  url: query,
  success: function(e) { 
    //...       
  },
  error : function(e) {
    //...        
  } 
});
于 2014-11-26T19:30:01.500 に答える
0

console.log() 呼び出しが原因である可能性があります。

IE では、console.log() 行を削除またはコメントアウトする必要があります。そうしないと、何度も処理されません。log() は「コンソール」オブジェクトのメソッドであり、IE ではコンソール オブジェクトは開発者ツールが開かれるまで定義されません (ツールを開くには F12 を押します)。

JavaScript が実行される前に開発者ツールを開いた場合、この問題は発生しません。さらに、現在ブラウザーにコンソール オブジェクトが定義されていない場合 (開発者ツールが開いていない場合) に使用する JavaScript のダミー/フォールバック console.log() オブジェクトとメソッドを定義できます。一部のコードについては、この StackOverflow の質問を参照してください: IE8 で console.log に何が起こったのですか?

于 2013-05-03T23:00:41.843 に答える