31


配列を含む JSON ファイルを自分のサーバーから JavaScript オブジェクト変数にロードしたいと考えています。
ページのロード中にデータが必要になるため、ページのロードの開始時に同期的に実行したいと考えています。

私は jQuery.getJSON を使用することができましたが、これは非同期 ajax であり、少しやり過ぎのようです。

独自の解析を行わずに JSON を同期的にロードする方法はありますか?
(多かれ少なかれ を使用するように<script language="JavaScript" src="MyArray.json"></script>

私はjavascriptの初心者なので、それが理にかなっていることを願っています。パオロ

4

7 に答える 7

37

getJSON()ajax()set を使用した関数の省略形ですdataType:'json'。このajax()関数を使用すると、リクエストに関する多くのカスタマイズが可能になります。

$.ajax({
  url: 'MyArray.json',
  async: false,
  dataType: 'json',
  success: function (response) {
    // do stuff with response.
  }
});

引き続きコールバックを使用しますasync:falseが、実行が ajax 呼び出しから続行される前に起動します。

于 2010-11-07T08:37:09.910 に答える
15

どうぞ:

// Load JSON text from server hosted file and return JSON parsed object
function loadJSON(filePath) {
  // Load json file;
  var json = loadTextFileAjaxSync(filePath, "application/json");
  // Parse json
  return JSON.parse(json);
}   

// Load text with Ajax synchronously: takes path to file and optional MIME type
function loadTextFileAjaxSync(filePath, mimeType)
{
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.open("GET",filePath,false);
  if (mimeType != null) {
    if (xmlhttp.overrideMimeType) {
      xmlhttp.overrideMimeType(mimeType);
    }
  }
  xmlhttp.send();
  if (xmlhttp.status==200 && xmlhttp.readyState == 4 )
  {
    return xmlhttp.responseText;
  }
  else {
    // TODO Throw exception
    return null;
  }
}

注: このコードは、最新のブラウザー (IE8、FF、Chrome、Opera、Safari) でのみ機能します。古いバージョンの IE では、ActiveX を使用する必要があります。必要に応じてお知らせください。その方法を教えます ;)

于 2010-11-07T10:17:13.497 に答える
4

ある種のサーバー スクリプトを使用している場合は、データをページのスクリプト タグに出力できます。

<script type="text/javascript">
var settings = <?php echo $json; ?>;
</script>

これにより、AJAX を非同期的に使用するのではなく、データを同期的に使用できるようになります。

そうしないと、実行中の処理を続行する前に、AJAX コールバックを待つ必要があります。

于 2010-11-07T08:35:22.283 に答える
0

RequireJS がオプションの場合は、requirejs を使用して依存関係にすることができます。これを使用して、Angular アプリケーションでデータをモックします。アプリのブートストラップの前に、モックされたデータの一部が存在することが不可欠です。

//Inside file my/shirt.js:
define({
    color: "black",
    size: "unisize"
});

json データを定義でラップし、依存関係として宣言するだけです。詳細はこちら: http://requirejs.org/docs/api.html#defsimple

于 2013-09-02T21:05:43.453 に答える