1

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

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

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

谁能向我解释我哪里出错了?

4

2 回答 2

4

您的 laravel 项目的基本路径是localhost/laravel/public/,但您的 AJAX 请求只是localhost. 有一些方法可以解决这个问题。

方法一:

这是最受青睐的方法。(在我看来)

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

打开终端窗口(或 Windows 中的 cmd),cd 进入项目的主目录(包含 vendor、app 和 public 目录的目录)并输入命令php artisan serve。这将在 localhost:8000 上创建一个 PHP 服务器,您的基本路径将是/.

有很多选项,例如,php artisan help serve"如果您想查看所有选项。

完成后,您的代码应该可以工作。

方法二

如果你想使用 nginx 或 apache,你应该为你的项目添加一个虚拟主机。

这可以通过配置来完成。

阿帕奇:http ://httpd.apache.org/docs/current/vhosts/examples.html

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

之后,您应该在 hosts 文件中添加一个新条目。

方法三

正如您所说,您可以在'/types/'+$brand.

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

它应该去localhost/laravel/public/types/$brand

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

于 2013-07-11T09:33:31.157 回答
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)

于 2013-07-11T11:54:16.787 回答