【问题标题】:Laravel View Ajax Json Return Parsing ErrorLaravel View Ajax Json 返回解析错误
【发布时间】:2021-04-23 03:46:08
【问题描述】:

所以,我有一个搜索结果页面,一旦按下按钮就会加载内容。

问题是我返回的呈现的 html 在 json 中变成了解析错误!

我使用以下代码来执行它:

$.ajax({
                url: "{{ route('search.post') }}",
                type: 'POST',
                data: $('#searchForm').serialize(),
                dataType: 'json',
                context: this,
                headers: {
                    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
                }
            }).done(function( data ) {
                $("#results").html(data.results);

                $(this).find('i').removeClass('fas fa-spinner fa-spin').addClass('fas fa-search');
                $(this).prop('disabled', false);

                window.history.pushState(null, data.title, data.url);
            }).fail(function(xhr, textStatus, error) {
                console.log(xhr.statusText);
                console.log(textStatus);
                console.log(error);

                $(this).find('i').removeClass('fas fa-spinner fa-spin').addClass('fas fa-search');
                $(this).prop('disabled', false);
            });

我的方法,返回一个数组:

return response()->json([
                'url' => $url,
                'title' => sprintf("%s | %s", $page_title, config('constants.title')),
                'results' => $sections['results'],
            ]);

我的浏览器控制台输出:

OK
sortBy=newest:3702 parsererror
sortBy=newest:3703 SyntaxError: Unexpected token > in JSON at position 1663
    at parse (<anonymous>)
    at jquery.min.js:1
    at l (jquery.min.js:1)
    at XMLHttpRequest.<anonymous> (jquery.min.js:1)

而json响应是:

{"url":"vehicle_type=car\/sortBy=newest\/make=3\/radius=1\/","title":"Carros - Alfa Romeo | Standocasi\u00e3o","results":"    <div class=\"container\">\n        <div class=\"row mb-5\">\n            <div class=\"col-lg-9\">\n                <h2>Resultados<\/h2>\n            <\/div>\n            <div class=\"col-lg-3\">\n                <select\n                    name=\"sortBy\"\n                    id=\"sortBy\"\n                    aria-label=\"Organizar por\"\n                    class=\"form-control\"\n                >\n                    <option value=\"\">Organizar por<\/option>\n                    <option value=\"newest\" >Mais Recentes<\/option>\n                    <option value=\"lprice\" >Pre\u00e7o: mais baixo<\/option>\n                    <option value=\"hprice\" >Pre\u00e7o: mais alto\n                    <option value=\"lkm\" >KMs: menos<\/option>\n                    <option value=\"hkm\" >KMs: mais<\/option>\n                    <option value=\"lpower\" >Pot\u00eancia (cv): menor<\/option>\n                    <option value=\"hpower\" >Pot\u00eancia (cv): maior<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <div class=\"row\">\n                                                <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/31FEF3A4B63\/alfa-romeo-giulietta-16jtd\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta 1.6JTD\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta 1.6...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>179 850 km<\/li>\n                                        <li>2013<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">11 250 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/0D6CEC8B613\/alfa-romeo-mito-13-jtdm-super-95-cv\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo MiTo 1.3 JTDM SUPER 95 CV\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo MiTo 1.3 JTDM...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>22 000 km<\/li>\n                                        <li>2018<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">16 000 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/11D04E764DD\/alfa-romeo-156-16-spark-120cv\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo 156 1.6 Spark 120cv\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo 156 1.6 Spark...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>160 000 km<\/li>\n                                        <li>2000<\/li>\n                                        <li>Gasolina<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">1 750 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/64699ABD812\/alfa-romeo-gt-19-jtd-m-jet\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo GT 1.9 JTD M-JET\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo GT 1.9 JTD M-...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>249 000 km<\/li>\n                                        <li>2005<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">6 990 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/BCAD9136797\/alfa-romeo-147\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo 147 \" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo 147 <\/span>\n                                    <ul class=\"stats\">\n                                        <li>320 555 km<\/li>\n                                        <li>2005<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">4 000 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/953A805FD5B\/alfa-romeo-giulietta-jtd-distinctive\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta JTD DISTINCTIVE\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta JTD...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>120 000 km<\/li>\n                                        <li>2012<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">13 980 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/C2464F3039E\/alfa-romeo-mito-13-jtdm\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo MiTo 1.3 JTDM\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo MiTo 1.3 JTDM<\/span>\n                                    <ul class=\"stats\">\n                                        <li>98 800 km<\/li>\n                                        <li>2014<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">9 900 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/D499B41C08F\/alfa-romeo-giulietta-16-jtd-120cv-super-automatico\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta 1.6 JTD 120CV SUPER AUTOM\u00c1TICO\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta 1.6...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>26 526 km<\/li>\n                                        <li>2017<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">19 850 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/CF4A2AA2CDA\/alfa-romeo-giulietta-16-jtdm-super-tct-120cv\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta 1.6 JTDM SUPER TCT 120CV\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta 1.6...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>35 000 km<\/li>\n                                        <li>2018<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">20 000 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/11F3A68943A\/alfa-romeo-giulietta-16-jtdm-distinctive\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta 1.6 JTDm Distinctive\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta 1.6...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>178 593 km<\/li>\n                                        <li>2013<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">13 900 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/79E67BB8B8C\/alfa-romeo-159-sportwagon-20-jtdm\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo 159 Sportwagon 2.0 JTDm\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo 159 Sportwago...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>174 140 km<\/li>\n                                        <li>2012<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">12 990 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/4CDC1D1A62E\/alfa-romeo-mito-13-m-jet\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo MiTo 1.3 M-Jet\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo MiTo 1.3 M-Je...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>156 719 km<\/li>\n                                        <li>2012<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">10 990 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/7578076DF62\/alfa-romeo-159-19-jtd-m\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo 159 1.9 JTD-m\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo 159 1.9 JTD-m<\/span>\n                                    <ul class=\"stats\">\n                                        <li>239 342 km<\/li>\n                                        <li>2006<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">8 500 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/69231862E41\/alfa-romeo-giulia-22-d-super\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulia 2.2 D Super\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulia 2.2 D...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>176 922 km<\/li>\n                                        <li>2017<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">23 990 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/54A39E9193E\/alfa-romeo-gt\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo GT \" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo GT <\/span>\n                                    <ul class=\"stats\">\n                                        <li>270 000 km<\/li>\n                                        <li>2005<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">6 500 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/AE3F8CA0894\/alfa-romeo-stelvio-22d-q4-super-nacional\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Stelvio 2.2d Q4 Super Nacional\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Stelvio 2.2d...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>64 000 km<\/li>\n                                        <li>2017<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">35 850 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/915C414F465\/alfa-romeo-mito-sportiva-full-extras\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo MiTo SPORTIVA FULL EXTRAS\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo MiTo SPORTIVA...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>119 000 km<\/li>\n                                        <li>2011<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">9 990 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <div class=\"col-6 col-lg-3 col-xl-2\">\n                        <a href=\"\/\/127.0.0.1:8000\/classified\/70C02387CB1\/alfa-romeo-giulietta-16-multijet-panorama-automatico-nacional-nacional-nacionalco\">\n                            <div class=\"card\">\n                                <div class=\"card-img-top\">\n                                    <img src=\"\/\/cdn.standocasiao.pt\/assets\/img\/default_listing.jpg\" alt=\"Alfa Romeo Giulietta 1.6 MULTIJET PANORAMA AUTOMATICO  NACIONAL NACIONAL NACIONALCO\" \>\n                                <\/div>\n                                <div class=\"card-body\">\n                                    <span class=\"name\">Alfa Romeo Giulietta 1.6...<\/span>\n                                    <ul class=\"stats\">\n                                        <li>176 053 km<\/li>\n                                        <li>2017<\/li>\n                                        <li>Gas\u00f3leo<\/li>\n                                    <\/ul>\n                                    <div class=\"price\">16 900 <span class=\"currency\">EUR<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                                    <\/div>\n\n        <nav aria-label=\"Pagination\">\r\n        <ul class=\"pagination justify-content-center\">\r\n        \r\n                    <li class=\"page-item disabled\"><span class=\"page-link\">&laquo;<\/span><\/li>\r\n        \r\n        \r\n        \r\n                                                        <li class=\"page-item active\"><span class=\"page-link\">1<\/span><\/li>\r\n                                                                                    <li class=\"page-item\"><a class=\"page-link\" href=\"\/\/127.0.0.1:8000\/search\/post?page=2\">2<\/a><\/li>\r\n                                                                                    <li class=\"page-item\"><a class=\"page-link\" href=\"\/\/127.0.0.1:8000\/search\/post?page=3\">3<\/a><\/li>\r\n                                    \r\n        \r\n        \r\n        \r\n                    <li class=\"page-item\"><a class=\"page-link\" href=\"\/\/127.0.0.1:8000\/search\/post?page=2\" rel=\"next\">&raquo;<\/a>\r\n            <\/li>\r\n            <\/ul>\r\n<\/nav>\r\n\n    <\/div>\n"}

抱歉,如果不够详细,我已经工作了 18 个小时!

【问题讨论】:

  • \&gt;(alt="Alfa Romeo Giulietta 1.6JTD" \&gt;\n)在我的 IDE 中显示“非法转义序列”。我不能说如何解决它,但这就是问题所在。
  • 你的json无效。在json lint 中试试看。
  • 在位置 1663 附近,我看到了alt=\"Alfa Romeo Giulietta 1.6JTD\" \&gt;\n...注意\&gt; 可能应该是\/&gt;,因为它是一个图像关闭标签...所以这是因为@ 里面的HTML 987654331@错了(里面有错字)。

标签: php jquery json ajax laravel


【解决方案1】:

所以,经过一番挖掘,我设法想出了以下解决方案:

$response = json_encode([
                'url' => route('search', $url),
                'title' => sprintf("%s | %s", $page_title, config('constants.title')),
                'results' => $sections['results'],
            ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );

            return response($response)->header('Content-Type', 'application/json');

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多