我正在尝试创建一个获取两个参数的Javascript函数,URL
和data
,将其发布到PHP并返回服务器的response
而不使用jQuery或任何图书馆。 (Source)
function post(URL, data) {
return new Promise(function(resolve, reject) {
var req = new XMLHttpRequest();
req.open('POST', URL, true);
req.setRequestHeader('Content-type',
'application/x-www-form-urlencoded');
req.onload = function() {
if (req.status == 200) {
resolve(req.response);
} else {
reject(Error(req.statusText));
}
};
req.onerror = function() {
reject(Error('Network Error'));
};
req.send(data);
});
}
<?php
if ( isset($_POST['data']) ) {
echo json_encode(array("Hey {$_POST['data']}" ));
} else {
echo json_encode(array("Error"));
}
?>
到目前为止一直很好,这就是我如何处理它。
function handle(URL, data) {
post(URL, data).then(function(response) {
return response;
}, function(error) {
return error;
});
}
但是,这总是返回undefined。有趣的是,如果我尝试console.log(response)
它可以正常工作。
我希望能够做alert(handle(URL, data));
这不可能吗?如果是,我怎么能绕过它?
答案 0 :(得分:0)
我最终修改了我的脚本以改为使用回调。
var AJAX = {
get: function(a, b) {
var c = new XMLHttpRequest();
c.onreadystatechange = function() {
if (c.readyState == 4 && c.status == 200) {
b(c.responseText);
}
};
c.open('GET', a, true);
c.send();
},
post: function(a, b, d) {
var c = new XMLHttpRequest();
c.onreadystatechange = function() {
if (c.readyState == 4 && c.status == 200) {
d(c.responseText);
}
};
c.open('POST', a, true);
c.setRequestHeader('Content-type',
'application/x-www-form-urlencoded');
c.send(b);
}
};
您可以这样称呼它:AJAX.get('text.txt', function doSomething(what){console.log(what)});