如何在Laravel 4中使用Ajax和jQuery?

时间:2013-07-11 08:04:31

标签: php ajax jquery laravel

我是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
});

为了测试函数的工作原理,我插入了两行来编辑我正在使用的项目。正在添加第一个“Test”选项时正确调用该函数。但是,它似乎永远不会激活回调函数,因为第二行测试代码没有被执行。

我怀疑问题是我为JavaScript '/types/'+$brand提供的网址。我在一些教程中看到过在我提供的URL之前使用的BASE var,但是我不明白为什么上面的代码不起作用。有什么指针吗?

任何人都可以向我解释我哪里出错了吗?

2 个答案:

答案 0 :(得分:4)

您的laravel项目的基本路径是localhost/laravel/public/,但您的AJAX请求仅转到localhost。有一些解决方法。

方法1:

这是最常用的方法。 (在我看来)

您可以使用PHP的内置Web服务器,而不是使用nginx,apache来启动Web服务器。

打开终端窗口(或Windows中的cmd),cd进入项目的主目录(包含供应商,应用程序和公共目录的目录),然后键入命令php artisan serve。这将在localhost:8000上创建一个PHP服务器,您的基本路径将是/

有很多选项,例如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

正如你所说,你可以在'/types/'+$brand之前添加一个BASE变量。

您的请求转到localhost/types/$brand

应该转到localhost/laravel/public/types/$brand

只需将'/types/'$brand替换为'/laravel/public/types'+$brand

即可

答案 1 :(得分:0)

使用HTML'base'元标记

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

声明此标记,确保每个相对URL都基于项目的真实绝对URL(http://localhost/my-laravel-project/public/),而不是基于Localhost的URL(http://localhost