用PHP更新表后调用JavaScript函数

时间:2017-05-24 13:23:35

标签: javascript php ajax

我有一个简单的网站,它使用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");
  }
}

最好的方法是什么?一些例子确实会有所帮助。

5 个答案:

答案 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);