Nano Hash - криптовалюты, майнинг, программирование

Как использовать Ajax с jQuery в Laravel 4?

Я новичок в Laravel 4 и смотрю, смогу ли я преобразовать в него свой веб-сайт (ранее написанный без фреймворка). Я не могу заставить AJAX (через jQuery) правильно взаимодействовать с моим контроллером.

Итак, во-первых, контроллер, с которым я работаю, называется IndexController.php и имеет функцию с именем types, которая показана ниже:

class IndexController extends BaseController {

// Other controller functions

public function types($brand) {

    $types = DB::select('select * from aircraft_types where brand_id = ?', array($brand));

    echo json_encode($types);

}

}

Функция возвращает данные из базы данных (в формате JSON). Затем я создал маршрут к этому контроллеру и функционирую следующим образом:

Route::get('types/{id}', array('uses'=>'IndexController@types'));

Я дважды проверил, что маршрут и функция работают, перейдя на //localhost/lavarel/public/types/1, и действительно он возвращает правильные данные JSON.

Рассматриваемая функция jquery приведена ниже:

function updateTypes($brand) {

$("#type").append('<option value="test">Test...</option>'); // This executes correctly

$.getJSON('/types/'+$brand, function(data) {
    $("#type").append('<option value="test 2">Test 2...</option>'); // This does not
// Some other JSON related code
});

Чтобы проверить, где работает функция, я вставил две строки, которые редактируют элемент, который я использую. Функция вызывается правильно, поскольку добавляется первая опция «Тест». Однако кажется, что функция обратного вызова никогда не активируется, поскольку вторая строка тестового кода не выполняется.

Я подозреваю, что проблема в URL-адресе, который я предоставляю JavaScript '/types/'+$brand. Я видел в некоторых учебниках, что BASE var используется перед URL-адресом, который я предоставляю, но я не понимаю, почему мой код выше не будет работать. Любые указатели?

Может ли кто-нибудь объяснить мне, где я ошибаюсь?

11.07.2013

  • что вы видите в responseText в консоли? 11.07.2013
  • простите меня - как мне получить к этому доступ? Веб-сайт не ломается и не показывает ошибку, он просто не вносит желаемых изменений. 11.07.2013
  • Если вы используете Chrome, перейдите к Tools > Developer tools в верхнем правом меню. Перейдите на вкладку Network и выберите XHR внизу. Здесь вы увидите любой запрос вашего приложения. Действительно полезно для отладки. 12.07.2013

Ответы:


1

Ваш базовый путь к вашему проекту laravel — localhost/laravel/public/, но ваш AJAX-запрос идет только к localhost. Есть несколько способов исправить это.

Способ 1:

Это наиболее предпочтительный метод. (я считаю)

Вместо использования nginx, apache для запуска веб-сервера вы можете использовать встроенный в PHP веб-сервер.

Откройте окно терминала (или cmd в Windows), перейдите в основной каталог вашего проекта (тот, в котором есть каталоги vendor, app и public) и введите команду php artisan serve. Это создаст PHP-сервер на локальном хосте: 8000, и ваш базовый путь будет /.

Есть много вариантов, например php artisan help serve", если вы хотите увидеть их все.

После того, как вы это сделаете, ваш код должен работать.

Метод 2

Если вы хотите использовать nginx или apache, вы должны добавить виртуальный хост для своего проекта.

Это можно сделать через конфиги.

Apache: http://httpd.apache.org/docs/current/vhosts/examples.html

Nginx: http://wiki.nginx.org/ServerBlockExample

После этого вы должны добавить новую запись в файл hosts.

Способ 3

Как вы сказали, вы можете добавить переменную BASE перед '/types/'+$brand.

Ваш запрос направляется localhost/types/$brand.

Он должен перейти к localhost/laravel/public/types/$brand.

Просто замените '/types/'$brand на '/laravel/public/types'+$brand

11.07.2013
  • ОК - я пробую метод 3, прежде чем пробовать два других. Как вы правильно заметили, используя URL-адрес '/types/'+$brand, он пытается загрузить //localhost/types/1 (что неверно). Поэтому я изменил URL-адрес на '/laravel/public/types/'+$brand. Как ни странно, это приводит к тому, что страница ищет //localhost/laravel/public/laravel/public/types/1 (т. е. /laravel/public повторяется дважды) (!) Есть идеи? 11.07.2013
  • Какой у вас сейчас код? Трудно ответить на ваш вопрос без фрагмента кода, который вы используете. Строка, которую вы разместили, должна работать. Вы уверены, что у вас /laravel/..., а не laravel/...? Кроме того, я рекомендую вам использовать метод 1 или 2. Потому что тогда вы можете опубликовать свой проект на домене БЕЗ изменения кода. 11.07.2013
  • Ах, это интересный момент. Возвращаясь на шаг назад — когда я загружаю этот сайт на свой хост-сервер — как мне заставить мой домен указывать на нужное место? На данный момент он, естественно, идет в индексный файл в моей общей папке, но, предположительно, мне нужно поместить туда всю структуру папок Laravel. Как указать URL-адрес нужного файла? 11.07.2013
  • Вы хотите указать на публичный каталог да. Если вы размещаете самостоятельно или на VPS, это можно легко сделать с помощью метода 2 выше. Если вы размещаете его на веб-хостинге, вероятно, есть папка public_html, в которую вы можете загрузить. Это ваша общая папка. Загружайте туда содержимое своего публичного каталога, а остальное снаружи. После этого просто измените свой публичный путь в bootstrap/paths.php. 12.07.2013

  • 2

    Используйте метатег HTML «база»

    <!doctype html>
    <html lang="en">
    <head>
        ...
        <base href="{{ URL::to('/') }}"/>
        ...
    

    Объявив этот тег, вы гарантируете, что каждый относительный URL-адрес будет основан на реальном, абсолютном URL-адресе проекта (http://localhost/my-laravel-project/public/), а не на URL-адресе Localhost (http://localhost)

    11.07.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..