0

我已经成功实现了 Jquery 验证插件http://posabsolute.github.com/jQuery-Validation-Engine/但我现在正试图让 ajax 数据库电子邮件检查工作(电子邮件存在/电子邮件可用)并且我已经写了一些php 脚本来完成这项工作。它有点工作,但我从我的 IF ELSE 语句中得到了最意想不到的异端奇怪行为(对我来说似乎真的很疯狂)。观察###标记的评论

PHP 代码:查看 IF ELSE 语句

/* RECEIVE VALUE */
$validateValue = $_REQUEST['fieldValue'];
$validateId = $_REQUEST['fieldId'];


$validateError = "This username is already taken";
$validateSuccess = "This username is available";


/* RETURN VALUE */
$arrayToJs = array();
$arrayToJs[0] = $validateId;

$req = "SELECT Email
  FROM business
  WHERE Email = '$validateValue'";

$query = mysql_query($req);
while ($row = mysql_fetch_array($query)) {
  $results = array($row['Email']);
}



if (in_array($validateValue, $results)) {

   $arrayToJs[1] = false;
   echo json_encode($arrayToJs); // RETURN ARRAY WITH ERROR ### popup shows "validating, please wait" then "This username is already taken" when email typed is in database - i.e. Working
   file_put_contents('output.txt', print_r("1 in array - Email is Taken  " . $validateValue, true)); ### this runs!!

}else{

  $arrayToJs[1] = true; // RETURN TRUE
  echo json_encode($arrayToJs); // RETURN ARRAY WITH success ### popup shows "validating, please wait" when email typed is NOT in the database - i.e. not Working
  file_put_contents('output.txt', print_r("2 else - Email is available  " .   $validateValue, true)); 
  //### THIS RUNS TOO !!!!!!!!!!!!! i.e. echo json_encode($arrayToJs) wont work for both.. If I change (in_array()) to (!in_array()) i get the reverse when email is in database. 
  //i.e. only the else statements echo json_encode($arrayToJs) runs and the popup msg shows up green "This username is available" crazy right??? 
  //so basically IF ELSE statements run as expected (confirmed by output.txt) but only one echo json_encode($arrayToJs) will work.!!!! 
  //If i remove the json_encode($arrayToJs) statements and place it once after the IF ELSE statement i get the same problem.
  //both $arrayToJs[1] = false; and $arrayToJs[1] = true; can work separately depending on which is first run IF or ELSE but they will not work in the one after another;
  }

这是代码的其余部分-->

1-HTML 表单输入代码:

    <tr>
        <td> <Label>Business Email</Label>
            <br>
            <input type="text" name="Email" id="Email" class="validate[required,custom[email],ajax[ajaxUserCallPhp]] text-input">
        </td>
    </tr>

2-jquery.validationEngine.js 中的相关 JQUERY 代码:

$.ajax({
            type: type,
            url: url,
            cache: false,
            dataType: dataType,
            data: data,
            form: form,
            methods: methods,
            options: options,
            beforeSend: function() {
                return options.onBeforeAjaxFormValidation(form, options);
            },
            error: function(data, transport) {
                methods._ajaxError(data, transport);
            },
            success: function(json) {
                if ((dataType == "json") && (json !== true)) {
                    // getting to this case doesn't necessary means that the form is invalid
                    // the server may return green or closing prompt actions
                    // this flag helps figuring it out
                    var errorInForm=false;
                    for (var i = 0; i < json.length; i++) {
                        var value = json[i];

                        var errorFieldId = value[0];
                        var errorField = $($("#" + errorFieldId)[0]);

                        // make sure we found the element
                        if (errorField.length == 1) {

                            // promptText or selector
                            var msg = value[2];
                            // if the field is valid
                            if (value[1] == true) {

                                if (msg == ""  || !msg){
                                    // if for some reason, status==true and error="", just close the prompt
                                    methods._closePrompt(errorField);
                                } else {
                                    // the field is valid, but we are displaying a green prompt
                                    if (options.allrules[msg]) {
                                        var txt = options.allrules[msg].alertTextOk;
                                        if (txt)
                                            msg = txt;
                                    }
                                    if (options.showPrompts) methods._showPrompt(errorField, msg, "pass", false, options, true);
                                }
                            } else {
                                // the field is invalid, show the red error prompt
                                errorInForm|=true;
                                if (options.allrules[msg]) {
                                    var txt = options.allrules[msg].alertText;
                                    if (txt)
                                        msg = txt;
                                }
                                if(options.showPrompts) methods._showPrompt(errorField, msg, "", false, options, true);
                            }
                        }
                    }
                    options.onAjaxFormComplete(!errorInForm, form, json, options);
                } else
                    options.onAjaxFormComplete(true, form, json, options);

            }
        });

jquery.validationEngine-en.js 中 ajaxUserCallPhp 的 3-相关代码:

"ajaxUserCallPhp": {
                "url": "validation/php/ajaxValidateFieldUser.php",
                // you may want to pass extra data on the ajax call
                "extraData": "name=eric",
                // if you provide an "alertTextOk", it will show as a green prompt when the field validates
                "alertTextOk": "* This username is available",
                "alertText": "* This user is already taken",
                "alertTextLoad": "*Validating, please wait"
            },

我确定问题出在这个回声上。

回声 json_encode($arrayToJs)

请帮助我在这方面花了很长时间,它几乎可以完全正常工作。

澄清一下-我基本上是在尝试对其进行编码,以便如果我在数据库中键入一封电子邮件,它会显示红色“此用户名已被使用”,然后如果我将输入框编辑为不在数据库中的电子邮件,它会更改为绿色“用户名是可用”目前只有一个 json_encode 将在任何情况下运行,无论我如何更改 if else 语句 -</p>

非常感谢您提前。

4

2 回答 2

0

我能够在不修改语言文件的情况下更改 ajaxusercallphp、ajaxnamecallphp 的 ajax url...您需要在 jaquery.validateEngine.js 中搜索此行

查找:_ajax:function(field,rules,I,options)

然后向下滚动到 ajax 请求 .ie $.ajax

并将 url:rule.url 更改为 options.ajaxCallPhpUrl

然后您所要做的就是将 url 作为一个选项包含在内,如下所示:

JQuery("#formid").validateEngine('attach', {ajaCallPhpUrl : "yoururl goes here", onValidationComplete:function(form,status){ }) 我能够在不修改语言文件的情况下更改 ajaxusercallphp、ajaxnamecallphp 的 ajax url ...您需要在 jaquery.validateEngine.js 中搜索此行

查找:_ajax:function(field,rules,I,options)

然后向下滚动到 ajax 请求 .ie $.ajax

并将 url:rule.url 更改为 options.ajaxCallPhpUrl

然后您所要做的就是将 url 作为一个选项包含在内,如下所示:

JQuery("#formid").validateEngine('attach', {ajaCallPhpUrl : "你的网址在这里", onValidationComplete:function(form,status){ })

于 2014-03-02T16:22:44.713 回答
0

好的,在小提琴之后终于明白了。我发现 json_encode() 在发布任何错误或警告时返回 false。使用 xampp/php/logs/error_logs 文件中的 php 错误日志文件,我意识到只有当查询结果为 null 时才会出现错误,从而使 $results = null。这导致了一个输出错误,阻止 json_encode() 回显真,这就是为什么我只得到一个响应。

为了解决这个问题,我在查询到数组部分后使用以下代码确保 $result 数组不为空。

if(empty($results)){
   $results [0]= ("obujasdcb8374db");
}

整个代码现在

$req = "SELECT Email
FROM business
WHERE Email = '$validateValue'";

$query = mysql_query($req);
while ($row = mysql_fetch_array($query)) {
$results[] = $row['Email'];
}

if(empty($results)){
  $results [0]= ("obujasdcb8374db");
}

if (in_array($validateValue, $results)) {
  $arrayToJs[1] = 0;
  echo json_encode($arrayToJs); // RETURN ARRAY WITH ERROR


} else {

  $arrayToJs[1] = 1; // RETURN TRUE
  echo json_encode($arrayToJs); // RETURN ARRAY WITH success
  }
于 2013-03-13T18:16:23.393 回答