#php #jquery #json #ajax #laravel
#php #jquery #json #ajax #laravel
Вопрос:
Итак, у меня есть страница результатов поиска, которая должна загружать содержимое при нажатии кнопки.
Проблема в том, что каким-то образом отображаемый 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 | Standocasiu00e3o","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 <selectn 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" >Preu00e7o: mais baixo</option>n <option value="hprice" >Preu00e7o: mais alton <option value="lkm" >KMs: menos</option>n <option value="hkm" >KMs: mais</option>n <option value="lpower" >Potu00eancia (cv): menor</option>n <option value="hpower" >Potu00eancia (cv): maior</option>n </select>n </div>n </div>nn <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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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 AUTOMu00c1TICO" >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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>Gasu00f3leo</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>nn <nav aria-label="Pagination">rn <ul class="pagination justify-content-center">rn rn <li class="page-item disabled"><span class="page-link">amp;laquo;</span></li>rn rn rn rn <li class="page-item active"><span class="page-link">1</span></li>rn <li class="page-item"><a class="page-link" href="//127.0.0.1:8000/search/post?page=2">2</a></li>rn <li class="page-item"><a class="page-link" href="//127.0.0.1:8000/search/post?page=3">3</a></li>rn rn rn rn rn <li class="page-item"><a class="page-link" href="//127.0.0.1:8000/search/post?page=2" rel="next">amp;raquo;</a>rn </li>rn </ul>rn</nav>rnn </div>n"}
Прошу прощения, если это недостаточно подробно, я работал последние 18 часов!
Комментарии:
1.
>
(atalt="Alfa Romeo Giulietta 1.6JTD" >n
) показывает «незаконную Escape-последовательность» в моей IDE. Я не могу сказать, как это исправить, но в этом и заключается проблема.2. Ваш json недействителен. Попробуйте это в json lint для удовольствия.
3. Я вижу около позиции 1663
alt="Alfa Romeo Giulietta 1.6JTD" >n
… Обратите>
внимание на то, что, вероятно, должно быть/>
, потому что это тег закрытия изображения… Так это потому, что HTML внутри$sections['results']
неверен (в нем есть опечатка).
Ответ №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');