0

jQueryとAJAXを使用してフォームを送信すると、私のPHPファイルはすべての検証を行い、2つの応答のうちの1つを返します。

成功した場合:

<div id='formres'>1</div>
<div id='formresposta'>
    <h2>SUCESSO</h2>
</div>

またはこれ(送信されていない、エラーが見つかりました):

<div id='formres'>0</div>
<ul>
    <li>errnome</li>
    <li>errmail</li>
    <li>errmsg</li>
</ul>

私がこれまでに書いたjQueryは、エラーが見つかった場合にアクションを実行することを除いて、私が望むことを何とか実行できます...ここにあります:

    $("#formcontacto").submit(function () {
        var dados = $(this).attr("action");
        $.post(dados,{
            nome:$(".nome").val(),
            email:$(".email").val(),
            telefone:$(".telefone").val(),
            mensagem:$(".mensagem").val()
        },
        function (dados) {
                resultado = $(dados).filter(function(){ return $(this).attr("id") == "formres"}).text();
                alert(resultado);
                if(resultado == 1){
                    $("#formcontacto").fadeOut("slow");
                    $("#formcontainer").html(dados).fadeIn(3000);
                }else{
                    alert(dados);
                    var erros = $(dados).filter(function(){ return $(this).is("li") }).text();
                    alert(erros);
                    erros.each(function() {
                    if ($(this).text() == 'errnome'){ $('.nome').css({'border':'1px solid #a00','background-color':'#ffbaba','color':'#222'}); }
                    if ($(this).html() == 'errmsg'){ $('.mensagem').css({'border':'1px solid #a00','background-color':'#ffbaba','color':'#222'}); }
                    if ($(this).html() == 'errmail'){ $('.email').css({'border':'1px solid #a00','background-color':'#ffbaba','color':'#222'}); }
                    })
                }
            });
        return false;

    })

.is( "li")が機能しない理由がわかりません。また、これを非常に複雑にしていると感じています...手がかりはありますか?

前もって感謝します。

4

1 に答える 1

0

これはjsonの仕事のように見えますが、そのようなことについて私は完全に考えています。

必要に応じて PHP 配列を作成し、次のように変換できます。

 json_encode($array)

次に、.post 関数と同様に、ファイルを簡単にリクエストできます。

$.getJSON('your.php', { your: options }, function(data) {
  if(data.formres == 1){
     // Everything is ok
  } else {
     // Something went wrong, so print the problems
     $.each(data.errors, function(key, val) {
       $("#result").append('<li id="' + key + '">' + val + '</li>');
     });
});

JSON は次のようになります。

{
  "formres": "1",
  "errors": {
    "1": "wrong name",
    "2": "wrong email",
    "3": "wrong whatever"
  } 
}

PHP の JSON は、PHP 5.2.0 から使用できることに注意してください。また、コードはテストされていません

于 2012-12-13T16:19:21.250 に答える