AJAX提交和500服务器错误

时间:2015-12-20 08:08:51

标签: javascript php jquery ajax wordpress

尝试运行AJAX时出现500服务器错误。我是AJAX的新手。如果我在脚本中没有运行AJAX,例如只运行:

,那么代码中的每一件事都可以工作

$("#book-appointment-form").submit();

因此,似乎所有数据库功能都很好。但是,我需要AJAX在Wordpress页面中运行我的代码。

我在错误日志中看不到任何注释。控制台日志显示该URL指向正确的位置。我可能会缺少什么?

控制台日志显示隐藏输入中的数据,显示在confirmedData:

0: Object
name: "csrfToken"
value: "0f4343dfd0e71a8fa515d08f340f7bc9"
__proto__: Object
1: Object
name: "post_data"
value: "{"customer":{"last_name":"Test","first_name":"Joe","email":"email4me@verizon.net","phone_number":"9093334444","address":"","city":"","zip_code":"","id_cellcarrier":"2","wp_id":"1"},"appointment":{"start_datetime":"2015-12-25 11:00:00","end_datetime":"2015-12-25 11:50:00","notes":"","is_unavailable":false,"id_users_provider":"85","id_services":"13"},"manage_mode":false}"
__proto__: Object
length: 2
__proto__: Array[0]

查看:

<html>

                    <form id="book-appointment-form" style="display:inline-block" method="post">
                        <button id="book-appointment-submit" type="button">Confirm</button>
                        <input type="hidden" name="csrfToken" />
                        <input type="hidden" name="post_data" />
                    </form>
</html>

JS

<script>
                $("#book-appointment-form").submit(function(event){
                    var confirmedData = $(this).serializeArray();
                    var dataUrl = GlobalVariables.baseUrl + '/index.php/appointments/ajax_confirm_appointment'; 
                    $.post(dataUrl, confirmedData, function(response) {
                    ////////////////////////////////////////////////////////////
                    console.log('Customer Confirmed Post Response:', response);
                    ////////////////////////////////////////////////////////////
                    }, 'json');
                    event.preventDefault();
                });
                $("#book-appointment-form").submit();
</script>

PHP CONTROLLER

<?php
public function ajax_confirm_appointment() {
    if($_POST["post_data"]){
        try {
            $post_data = json_decode($_POST['post_data'], true);
            $appointment = $post_data['appointment'];
            $customer = $post_data['customer'];

            ...some database stuff here ....

        } catch(Exception $exc) {
            $view['exceptions'][] = $exc;
        }

        $this->load->view('appointments/book_success', $view);
        $form_data = TRUE;
         break;
        } else { 
        $form_data = FALSE;
        }
        echo json_encode($form_data);
    }
?>

我尝试用serializeArray()替换serialize()。我还尝试serializeArray()转换为$.param(confirmedData) - 结果确实相同但仍然无法到达服务器。 500错误仍然存​​在。我认为serialize()可能更合适。

2 个答案:

答案 0 :(得分:0)

我认为它与Ajax无关。您通过ajax调用的脚本可能存在问题。

尝试在没有ajax dataUrl

的情况下进行检查

请同时查看链接。 http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm

答案 1 :(得分:0)

这有效:

我的JS

<script>
            $("#book-appointment-form").submit(function(event){
                    var postData = { 
                    csrfToken: $('input[name=csrfToken]').val(),
                    post_data: jQuery.parseJSON($('input[name="post_data"]').val())
                };
                var postUrl = GlobalVariables.baseUrl + '/index.php/appointments/ajax_confirm_appointment'; 
                $.post(postUrl, postData, function(response) {
                ////////////////////////////////////////////////////////////
                console.log('Customer Confirmed Post Response:', response);
                ////////////////////////////////////////////////////////////
                if (!GeneralFunctions.handleAjaxExceptions(response)) return;
                }, 'json');
            });
</script>

我的控制器

<?php
public function ajax_confirm_appointment() {
    try {
        $post_data = $_POST['post_data'];
        $appointment = $post_data['appointment'];
        $customer = $post_data['customer'];

        ...some database stuff here ....

    }
    echo json_encode($yn_response);
}
?>

不再有500个服务器错误。