将错误发送到laravel控制器的ajax请求,并相应地更改视图中的div

时间:2013-11-23 21:46:24

标签: jquery ajax laravel laravel-4

laravel控制器中的

我通过类似

的代码将验证错误发送到ajax请求
$validator = Validator::make(Input::all(), $rules);


        if ($validator->fails())
        {

            $data = array('errors' =>  $validator->errors()->toArray());                
                    return Response::json($data);

        }

现在由ajax接收我希望它(验证错误)给文本区域和错误显示div留下深刻印象。为此,我正在这样做。

    bla bla blaala

success:function(data, textStatus, xhr, error){

                         if(data == "OK") 
                         {
                            $('div.result').html('You have successfully posted ! Please refresh to see your post <hr/>');
                            //window.location.reload(true);

                         }
                         else
                         {
                          //  $('div.arr').data(data.errors);  

                            //alert("---"+data);
                             $('div.result').html('Your post can not be possible ! Please check the text bOx ! <hr/> ');
                             $('div.arr.errors').val(data.errors);
                             $("#ask").attr("disabled", false)



                        }

我想对此

产生影响
    <div class="arr control-group{{ $errors->first('about', ' has-error') }}">

但只有

<div class="result" style="color:red;">


</div>

在错误期间正在工作。

如何收集错误并在视图中显示?

提前谢谢\ m /

1 个答案:

答案 0 :(得分:1)

只是将javascript数组/对象转储到div中将无法正常工作。你几乎有两个选择让它发挥作用。您可以使用PHP迭代数组并在那里创建HTML并将HTML作为字符串发送到Javascript,您只需将div的innerHTML设置为字符串即可。或者你可以保持它现在的方式,并使用Javascript和jQuery迭代对象并填写客户端的div。

在客户端进行

jQuery.each(data.errors, function(i, val)
{
    error = document.createElement('SPAN');
    error.innerHTML = val;
    error.className = 'error'; // Can set the css class of the element
    error.style.backgroundColor = '#F00';  // Can set other css stuff as well =)
    $('div.arr.errors').append(error);
});

在服务器端执行此操作(仍需要一些客户端工作)

// PHP Stuff
$html = "<div class='errorClass'>";
foreach($validator->errors()->toArray() as $error)
{
    $html .= "<span>" . $error . "</span>";
}
$html .= "</div>";
return Response::json(array('html' => $html));

// Javascript Stuff
$('div.arr.errors').html(data.html);

注意:我对jQuery并不是那么棒,但我不相信$('div.arr.errors')可以使用你拥有的东西。我会减少对自己的混淆,只需给它一个errorArray或其他东西的ID,然后使用$('#errorArray')