0

独自の POST リクエストを作成しようとしています。これが私の機能です:

function sendPost(o) {
    var h = new XMLHttpRequest();
    h.onreadystatechange = requestComplete;

    function requestComplete() {
        if ( h.readyState === 4 ) {
            if ( h.status === 200 ) {
                if ( o.done ) {
                    o.done(h.responseText);
                }
            } else {
                if ( o.fail ) {
                    o.fail(h.responseText);
                }
            }
        }
    }

    h.open('POST', o.url, true);
    h.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    h.send(o.data);
}

すべて問題ありませんが、jQuery のようにdataType をscriptに設定する方法が混乱しています。

$.ajax({
    url: 'someurl.php',
    type: 'POST',
    dataType: 'script' // <-- how to do this?
});
4

1 に答える 1

2

dataTypeAjax リクエストの送信とはほとんど関係ありません。それは主に jQuery がresponseで何をするかについてです。

ドキュメントから:

"script": 応答を JavaScript として評価し、プレーン テキストとして返します。キャッシュ オプションが true に設定されていない限り、クエリ文字列パラメーター "_=[TIMESTAMP]" を URL に追加してキャッシュを無効にします。

そのため、ここで送信するためにいくつかの変更があります。

  1. 取ったo.data
  2. からタイムスタンプを取得するnew Date()
  3. チェック(indexOf('?')クエリ文字列が既にあるかどうかを確認することにより)
  4. URL に または のいずれ?&を追加し、その後にタイム スタンプを付けます。

残りはすべて、応答の処理に関するものです。

レスポンスを JavaScript として評価します

そう:

eval(h.responseText);

ただし、これはすべてかなり厄介です。一般的に言えば、スクリプトを動的にロードする場合は、通常、<script>要素をページに追加して実行することをお勧めします。

于 2013-08-15T05:16:32.580 に答える