无法从通过php发送的ajax响应更新div文本

时间:2017-01-02 06:35:17

标签: javascript php jquery html ajax

如果有什么内容涵盖了这个问题,请为此问题道歉。我搜索并找到许多相关帖子,这些帖子让我能够达到这一点。

我有一个带有1个输入框和一个按钮的表单片段以及一个用于状态消息的div:

<div>
    <div>
        <div>
            <input id="discount_code"name="discount_code" placeholder="  Enter discount code."></input>
        </div>
        <div>
            <a class="btn btn-xs btn-primary" id="btn-validate">Validate</a>
        </div>
    </div>
    <div id="status_msg" style="border: 1px solid black"></div>
</div>

然后我有以下几点javascript:

  1. 根据点击触发的位:

    $('#btn-validate').on('click', function(e) { e.preventDefault(); validateCode(11); // "11" is a php-provided ID variable });

  2. 带有ajax调用的javscript:

    function validateCode(eventID) {
    var codeValue = $("#discount_code").val();
    if (FieldIsEmpty(codeValue)) { // outside function that exists/works fine
        $('#status_msg').html('Enter a discount code.').fadeIn(500);
        $('#status_msg').fadeOut(2500);
        //bootbox.alert("Please enter discount code to validate.");     
    } else {
        $.ajax({
            type: 'POST',
            cache: false,
            async: true,
            url: '/include/discount_validation.php',
            dataType: 'json',
            data: {
                event_id: eventID,
                discount_code: codeValue
            },
            beforeSend: function() {
                $('#status_msg').html('');
                $('#status_msg').fadeIn(0);
            },
            success: function(data) {
                $('#status_msg').html(data);
                $('#status_msg').fadeIn(0);
                //bootbox.alert(data);
            },
            error: function(data) {
                $('#status_msg').html(data);
                $('#status_msg').fadeIn(0);
                //bootbox.alert("Error validating discount code: " + JSON.stringify(discount_code));
            }
        });
    }};
    
  3. 我有一个PHP文件就足够了,它正在工作并根据输入产生以下json输出:

                // do php database things...
    header('Content-Type: application/json');
    
    if(!isset($percent)) {
        //echo("Invalid code: '" . $dCode ."'");
        $message = "Invalid code: '" . $dCode ."'";
        echo json_encode(array('status' => 'error','message' => "$message"));
    } else {
        $message = "Code: '" . $dCode . "'" . " provides a " . $percent . "% discount.";
        echo json_encode(array('status' => 'success', 'message' => "$message"));
    }
    

    在上面,我已经注释了bootbox.alert行,但是当它们处于活动状态时,会出现该框,并且消息正如我所期望的那样。

    最后,如果输入框为空则触发的第一个条件都会触发警报(未注释时)并更改#status_msg的文本。

    我将边框放入以验证可见性,#status_msg可见,但只有在成功或错误触发时才设置。

3 个答案:

答案 0 :(得分:0)

首先检查您是否在响应中获得了一个对象 在成功添加

alert(JSON.stringify(data));

如果它显示了对象,那么你最好去检查创建对象的php文件。

如果在ajax成功后收到了object,那么你需要使用jQuery.parseJSON解析json对象

例如:

response = jQuery.parseJSON(data);

现在你有了一个名为response的javascript对象。

现在使用它

response['status']response['message']成功的ajax。

答案 1 :(得分:0)

检查代码 首先丢弃:“来自php代码$ message变量

if(!isset($percent)) {
    //echo("Invalid code: '" . $dCode ."'");
    $message = "Invalid code: '" . $dCode ."'";
    echo json_encode(array('status' => 'error','message' => $message));
} else {
    $message = "Code: '" . $dCode . "'" . " provides a " . $percent . "% discount.";
    echo json_encode(array('status' => 'success', 'message' => $message));
}

然后使用字体结束成功函数的响应:

success: function(data) {

            $('#status_msg').html(data.message);
            $('#status_msg').fadeIn(0);

        },

答案 2 :(得分:-1)

ajax()内设置您的数据。

success: function(data) {
            var result = eval(data);
            $('#status_msg').html(result.message);
            $('#status_msg').fadeIn(0);
            //bootbox.alert(data);
        },
        error: function(data) {
            var result = eval(data);
            $('#status_msg').html(result.message);
            $('#status_msg').fadeIn(0);
            //bootbox.alert("Error validating discount code: " + JSON.stringify(discount_code));
        }

if(!isset($percent)) {
    //echo("Invalid code: '" . $dCode ."'");
    $message = "Invalid code: '" . $dCode ."'";
    echo json_encode(array('status' => 'error','message' => $message));
} else {
    $message = "Code: '" . $dCode . "'" . " provides a " . $percent . "% discount.";
    echo json_encode(array('status' => 'success', 'message' => $message));
}