Ajax .keyup 操作的响应未定义

Ajax response undefined on .keyup operation

我为用户创建了一个输入表单域,用于输入他们从 Coldfusion 的 cfimage 标签创建并存储在会话变量中的图像中看到的验证码。当用户在输入表单域中输入验证码时,jQuery 调用 Coldfusion CFC 来检查用户输入的验证码是否与会话变量匹配。如果用户匹配验证码,则显示提交按钮。在响应返回之前,一切似乎都运行良好。这是我的代码。

HTML

<input type="text" id="mailform-input-captcha" name="captcha" placeholder="Type in Captcha *" data-constraints="@NotEmpty"/>

jQuery

    $(document).ready(function() {
    $('#mailform-input-captcha').keyup(function(){
        var captcha = $('#mailform-input-captcha').val();
        $.ajax({
            type: "POST",
            url: "cfc/handy.cfc?method=chk_captcha&returnformat=json",
            datatype: "json", 
            data: {
                captcha: captcha
            },
            cache: false,
            success:function(data) {
                if(data && data.length) {   // DO SOMETHING
                    $.each(data, function(i, val) {
                        console.log(val);
                        console.log(data[i].status);
                        // *** SUCCESS ***
                        if(status == "SUCCESS") {   // DO SOMETHING 
                            $('.btn').show();
                            alert(status);
                        // *** FAIL ***
                        } else if(status == "FAIL"){ // DO SOMETHING
                            $('.btn').hide();
                        }
                    });
                }
            }
        });
    });

如果我在输入表单域中键入字母,响应将作为来自 CFC 的结构数组返回。这是响应的示例。

回应

[{"STATUS":"FAIL"}]

当我查看 chrome 调试器时,我看到以下内容:

  1. console.log(val);记录数组中的每个字符 而不是每个结构。
  2. console.log(数据[i].status);记录为 "undefined".

该站点正在使用 jQuery 1.7.1 我已经尝试了更新版本的 jQuery,但没有看到任何变化。该脚本在其他站点上运行良好。感谢您的任何意见。

您在 datatype 中有错字,应该是 dataType

return 适当的内容类型 header 也是个好主意。由于未设置 dataType 且 header 不是 application/json,因此似乎将响应视为文本

另请注意 javascript 区分大小写,因此您需要检查 data[i].STATUS 或更改输出