【问题标题】:Ajax returns undefined on console.log(errors) - php server side validationAjax 在 console.log(errors) 上返回 undefined - php 服务器端验证
【发布时间】:2017-07-16 09:30:23
【问题描述】:

我希望在 php 出现验证错误时通知用户。我正在使用 laravel 5.3 创建表单和 Ajax 来获取错误消息。

这是我的 JavaScript 代码

 $.ajax({
    url: '/artistPost',
    type:'POST',
    data: {
        _token: Artisttoken,
        Name: Name,
        Phone: Phone,
    },

     error:function (data, response, xhr, status, error) {
        var errors = data.responseJSON;
        console.log(errors);
    }

这是我在 Chrome 开发者工具的网络部分看到的

<?php{"name":["The name field is required."],"phone":["The phone field is required."]}

这就是我在控制台看到的

更新

这是来自控制器

 public function create(ArtistRequest $request){

    dd($request->all());


    return redirect()->back();
}

【问题讨论】:

  • 这就是你所有的artistPost php代码吗?还是输出?
  • 点击保存时的输出
  • 我们能看到产生该输出的代码吗?
  • “/artistpost” url 调用了我在问题中更新的“create()”函数
  • 显示 ArtistRequest 的代码

标签: javascript php jquery ajax laravel-5.3


【解决方案1】:

您的服务器不应发送 &lt;?php 作为其响应的一部分 - 这表明服务器未将文件解析为 PHP,或者您正在以某种方式回显 &lt;?php 标记。

这篇文章似乎在解决一个非常相似的问题:

https://laracasts.com/discuss/channels/general-discussion/php-tag-in-ajax-response?page=1

特别看这个回复:

RouteServiceProvider.php 包含:

public function map(Router $router) { $router->group(['namespace' => $this->namespace], function ($router) { foreach (File::allFiles(app_path('Http/Routes')) as $partial) { require_once($partial->getPathname()); } }); }

上述方法加载的一个路由文件目前除了&lt;?php标签和NO NEW LINE之外什么都没有。没有新的生产线是问题所在。向文件添加了注释,一切正常。我不知道为什么这在生产服务器上比在本地更成问题。 PHP 版本都是 5.6。

【讨论】:

    【解决方案2】:

    您应该从控制器返回一个 json 输出。例如:

        return Response::json(['message'=> 'Your message', 'status'=> 'success'], 200);
    

    您应该有一个 if/else,以便您可以捕获成功和错误。

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 2013-12-14
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多