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 回答