Как использовать 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-адреса, но я не понимаю, почему мой код выше не работает. Любые указатели?

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

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

Способ 1:

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

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

Откройте окно терминала (или cmd в Windows), cd в основной каталог для вашего проекта (тот, у которого есть поставщик, приложение и общедоступные каталоги) и введите команду php artisan serve . Это создаст PHP-сервер на localhost: 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

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

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

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