我有一个简单的网站,它使用JavaScript收集用户输入并通过AJAX请求将数据发送到PHP脚本(脚本是外部php文件)。 PHP脚本使用此信息更新数据库。
现在,我的网站上有一个JS功能,只有在PHP脚本运行和数据库更新后才能调用。我不需要来自数据库或PHP脚本的任何数据,我只想确保在调用此Javascript函数之前更新数据库。
这就是AJAX请求的样子:
function ajax_post(){
if (typeof featureId !== 'undefined') {
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
var url = "parse_file.php";
var fn = featureId;
var vars = "featureId="+fn;
hr.open("POST", url, true);
// Set content type header information for sending url encoded variables in the request
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("status").innerHTML = return_data;
}
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars); // Actually execute the request
document.getElementById("status").innerHTML = "processing...";
hilites.destroyFeatures();
featureId = undefined;
}
else {
window.alert("Select polygon first");
}
}
最好的方法是什么?一些例子确实会有所帮助。
答案 0 :(得分:0)
查看代码,您只需要调用此部分的函数:
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("status").innerHTML = return_data;
// CALL YOUR FUNCTION HERE
}
}
最佳解决方案是使用Promise。但是,IE 11不支持此功能,因此您需要在某些浏览器上使用polyfill。
以下是使用jQuery的示例。
// This is the function you want to call after the script succeeds
function callbackSuccess() {
console.log('Done!');
}
// This is the data you want to submit to the PHP script
var myData = {
hello: "world"
};
// This is the actual AJAX request
$.post('/my-script.php', myData).done(function(){
callbackSuccess();
});
答案 1 :(得分:0)
将此添加到php保存功能的末尾:
header('Content-Type: application/json; charset=utf-8');
echo json_encode(array('status' => 'SUCCESS'));
拨打电话:
$.getJSON('url_to_your_php_file.php', function(data) {
if (data.status == 'SUCCESS') {
console.log('Save complete');
}
else {
console.log('oops, something went wrong!!');
}
});
可以返回类似ERROR的内容,这将返回:
console.log('oops, something went wrong!!');
答案 2 :(得分:0)
您可以尝试以下方法:
在php中你可以使用sql语句中的返回码
echo $ sqlResult = $ conn-> query($ sqlStatement);
在Javascript上,您可以尝试以下操作 $就({ url:'file.php', 类型:'POST', 数据:{
data1 : data1,
data2: data2
},
success: function(data){
if(data == success_code){
alert("Success")
} }
希望这有帮助!
答案 3 :(得分:0)
完成无错误的ajax请求并不意味着数据会毫无错误地保存到数据库中。
即使您的PHP脚本无法保存数据,它也可能会回复一些错误消息甚至是空输出作为常规HTTP响应,并且就ajax请求而言,它会显示成功。
如果你的目的是确保在调用JS函数之前确实保存了数据,那么PHP脚本应该包含足够的错误处理。
如果您编写PHP脚本以根据保存操作的实际结果返回响应状态代码,那么您可以在ajax响应处理中依赖这些状态代码(success = ok,error = not ok)。
我通常做的是,不是使用HTTP状态代码,而是回声" OK"或者在成功的PHP执行结束时使用类似的东西(" ERROR"如果有任何错误),然后在ajax响应处理程序中检查这些字符串(代码中的hr.responseText)。
答案 4 :(得分:-2)
Maby你必须尝试这个:
setTimeout(function(){
//your function here...
}, 500);