0

AJAX パネルが実行可能なオプションではない特定のページで AJAX をシミュレートする JSON 呼び出しを実装しようとしています。

州がドロップダウンから選択されたときに .aspx ページを呼び出し、Counties ドロップダウンに入力します。

私の州のドロップダウンでは、私はこの呼び出しを持っています:

onchange="jsonDropDownLoader('COUNTIES', this, 'Content2_DDLCounties')"

その呼び出しはページにあり、コードは次のとおりです。

function jsonDropDownLoader(sType, oParent, oChild) {
  var lstrChild = document.getElementById(oChild);
  var lstrFilter = ""

  if (oParent.value > "") {
    lstrFilter = oParent.value
  }

  lstrChild.options.length = 0;
  if (oParent.value > "") {
    var JSONobject = {};
    var http_request = new XMLHttpRequest();
    url = "/AltairWeb.NET/RS/jsonDropDownLoader.aspx?TYPE=" + sType + "&FILTER=" + lstrFilter
    http_request.open("GET", url, false);
    http_request.onreadystatechange = function () {
        var done = 4, ok = 200;
        if (http_request.readyState == done && http_request.status == ok) {
            JSONobject = JSON.parse(http_request.responseText);
        }
    };
    http_request.send(null);
    var JSONarray = eval('(' + http_request.responseText + ')').data
    for (var i = 0; i < JSONarray.length; ++i) {
        var optn = document.createElement("OPTION");
        optn.text = JSONarray[i].text;
        optn.value = JSONarray[i].value;
        lstrChild.options.add(optn);
    }
  }
}

これは文字列を返し、それを使用して County ドロップダウンを設定します。

データを取得していますが、QA サーバーでレンダリングされていません。IE8 で開発者ツールを使用すると、次の行にエラーがあることがわかります。

JSONobject = JSON.parse(http_request.responseText);

JSONが宣言されていないと言っています。

次の行にも構文エラーがあると表示されます。

var JSONarray = eval('(' + http_request.responseText + ')').data

これは私の開発ボックスで完全に機能します。ただし、私の開発ボックスには WinXP / IIS 5 が搭載されていますが、QA サーバーは IIS7.5 を搭載した Win2008 サーバーです。新しい開発ボックスが来る予定ですが、それまでは XP マシンで行き詰っています。

ローカルで動作するため、QA サーバー上の Windows または IIS のいずれか、おそらく http_request 呼び出しでセキュリティ上の問題があるように思われますが、Google 経由でこれを理解するのに役立つものを見つけることができません。

JSON.parse が IE9 より前の IE でサポートされていないという投稿を見たことがありますが、開発サーバーを指すときは IE8 で完全に機能しますが、QA サーバーを指すときはそうではないようです。ブラウザの問題です。何か案は?

4

2 に答える 2

1

まず、同期呼び出し(xhr.open('GET', url, false))を使用しており、。も使用してonreadystatechangeいます。これは間違っています。どちらかを選択してください。

https://developer.mozilla.org/en/xmlhttprequest

ここに画像の説明を入力してください

次に、ブラウザでJSONがサポートされているかどうかを確認します。https://stackoverflow.com/a/891306/48082を参照してください。よくわからない場合はjson2.js、json.orgから使用してください。

最後に、evalは使用しないでください。適切なJSONライブラリを使用してください。

于 2012-07-11T22:40:01.663 に答える
1

JSON.parse() は、サーバーではなくブラウザの機能です。

違いはサーバーにあると思います...クライアントブラウザではありませんか???

jQuery などの使用を検討することもできます (コーディングを簡素化し、このようなクロスブラウザーの問題を仲介するのに役立ちます)。例えば:

于 2012-07-11T22:31:22.727 に答える