2

JSON 文字列を返す jquery AJAX 呼び出しを行う関数を作成しました。単独では問題なく動作します。文字列をコンソールに出力すると、JSON 文字列の出力を確認できます ( console.log)。

function getJSONCustomers()
{
var response =  $.ajax({
    type: "GET",
    url: "getCustomers.php",
    dataType: "json",
    async: false,
    cache: false
  }).responseText;
  return response;  
};

ただし、その関数呼び出しの出力を含むように変数を設定すると、次のようになります。

var mydata = getJSONCustomers();

、それから私のTwitter-Bootstrap TypeAhead関数 (フォームのオートコンプリート) 内で使用してみてください:

data = mydata;
console.log(data);

コンソールに「未定義」エラーが表示されます。

以下は、このコードのスニペットです。

$(document).ready(function() {

var mydata = getJSONCustomers();

$('#Customer').typeahead({
    source: function (query, process) {
        customers = [];
        map = {};

        data = mydata;
        console.log(data);

 // multiple .typeahead functions follow......
});

ここで興味深いのは、data 変数を AJAX 関数から返されるハードコーディングされた JSON 文字列に設定すると、すべて正常に動作することです。

data = [{"CustNameShort": "CUS1", "CustNameLong": "Customer One"}]

先行入力関数内で JSON 文字列を使用するにはどうすればよいですか?

4

2 に答える 2

6

.responseText文字列を返します。配列を操作できるようにするには、最初に文字列を解析する必要があります。

var mydata = JSON.parse(getJSONCustomers());

そうは言っても、同期呼び出しを行うことは避けるべきです。非同期呼び出しから応答を返すにはどうすればよいですか? をご覧ください。コールバック/約束をどのように扱うかについての考えを得るために。

于 2013-07-08T19:30:30.647 に答える