0

AJAX の投稿を処理する関数を作成しようとしています。データを送信することはできましたが、リクエストからデータを受信する際に問題が発生しています。

基本的に、私は と呼ばれる関数を持っていますajaxPost(paramArray, target)。これは、パラメータを受け入れ、それらを文字列に入れてtarget.

問題は から来てajaxReq.onreadystatechangeいると思います。それをスキップしてスクリプトを終了していると思います。

私が言いたいことを適切に説明しているかどうかはわかりません。スクリプトは次のとおりです。

function ajaxPost(paramArray, target){
    var param = '';
    var key;
    for (key in paramArray){
        param = param + key + '=' + paramArray[key] + '&';
    }
    param = param.substring(0, param.length - 1);

    var ajaxReq = new XMLHttpRequest();
    ajaxReq.onreadystatechange = function(){
        if(ajaxReq.readyState == 4 && ajaxReq.status == 200){
            return ajaxReq.responseText;
            document.write('Test?');
        }
    }
    ajaxReq.open('POST', target, true);
    ajaxReq.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
    ajaxReq.send(param);
}

これは「作業を行う」関数であり、上記の関数を呼び出す関数の例を次に示します。

function submitPost(form){
    var title = form.title.value;
    var text = form.textBody.value;
    var name = form.nameOfPoster.value;
    var paramArray = new Array();
    paramArray['title'] = title;
    paramArray['text'] = text;
    paramArray['name'] = name;
    if (ajaxPost(paramArray, 'post.php')){
        location.reload(true);
    }
}

これは基本的にパラメータを に送信し、ajaxPost()何かが返された場合はページをリロードします。

私が言ったように、この投稿の冒頭で参照した一部を無視していると思います。そのデータが受信されるまで機能を停止できるかどうか疑問に思っています。

jQueryを使用するように言わないでください。私はjavascriptを試しています:)

ありがとう。他のヒントがある場合は、それも含めてください。

4

1 に答える 1

2

AJAX は非同期です。ajaxReq.onreadystatechangeリクエストが完了した後に関数が実行されるため、使用しようとしている方法は機能しません。同時に、スクリプトの実行は停止しません。したがって、この:

if (ajaxPost(paramArray, 'post.php')){
        location.reload(true);
}

前に実行されますajaxReq.onreadystatechange

あなたがすべきことは、あなたの関数にコールバックを渡すことです:

function ajaxPost(paramArray, target, callback){
    var param = '';
    var key;
    for (key in paramArray){
        param = param + key + '=' + paramArray[key] + '&';
    }
    param = param.substring(0, param.length - 1);

    var ajaxReq = new XMLHttpRequest();
    ajaxReq.onreadystatechange = function(){
        if(ajaxReq.readyState == 4 && ajaxReq.status == 200){
            callback(ajaxReq.responseText);
            document.write('Test?');
        }
    }
    ajaxReq.open('POST', target, true);
    ajaxReq.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
    ajaxReq.send(param);
}

そしてより:

function submitPost(form){
    var title = form.title.value;
    var text = form.textBody.value;
    var name = form.nameOfPoster.value;
    var paramArray = new Array();
    paramArray['title'] = title;
    paramArray['text'] = text;
    paramArray['name'] = name;
    ajaxPost(paramArray, 'post.php', function(res) { if(res)  location.reload(true); });
}
于 2012-12-05T08:53:45.687 に答える