我正在尝试创建一个函数来处理我的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:)
感谢。 如果你有这些提示,请添加其他提示。
答案 0 :(得分: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); });
}