Php 如何在Laravel4中使用Ajax和jQuery?

Php 如何在Laravel4中使用Ajax和jQuery?,php,ajax,jquery,laravel,Php,Ajax,Jquery,Laravel,我是全新的拉威尔4,看看我是否可以转换我的网站到它以前写没有一个框架。我无法通过jQuery让AJAX与我的控制器正确交互 首先,我使用的控制器名为IndexController.php,它有一个名为types的函数,如下所示: class IndexController extends BaseController { // Other controller functions public function types($brand) { $types = DB::select

我是全新的拉威尔4,看看我是否可以转换我的网站到它以前写没有一个框架。我无法通过jQuery让AJAX与我的控制器正确交互

首先,我使用的控制器名为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。我在一些教程中看到,在我提供的URL之前使用了一个基本变量,但我不明白为什么上面的代码不起作用。有什么建议吗


谁能告诉我哪里出了问题吗?

您的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,您应该为您的项目添加virtualhost

这可以通过配置来完成

阿帕奇:

Nginx:

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

方法3

正如您所说,您可以在“/types/”+$brand之前添加一个基变量

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

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


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

您的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,您应该为您的项目添加virtualhost

这可以通过配置来完成

阿帕奇:

Nginx:

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

方法3

正如您所说,您可以在“/types/”+$brand之前添加一个基变量

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

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


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

使用HTML“base”元标记即可

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

声明此标记后,您可以确保每个相对URL都基于项目的真实绝对URLhttp://localhost/my-laravel-project/public/,不在本地主机的URL上http://localhost使用HTML“base”元标记

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

声明此标记后,您可以确保每个相对URL都基于项目的真实绝对URLhttp://localhost/my-laravel-project/public/,不在本地主机的URL上http://localhost

您在控制台的responseText中看到了什么?请原谅-我如何访问它?该网站不会中断或显示错误,如果您使用的是右上角菜单中的Chrome go to Tools>Developer Tools,它不会进行所需的更改。转到网络选项卡并选择底部的XHR。在这里,您将看到您的应用程序的任何请求。对调试非常有帮助。您在控制台的responseText中看到了什么?请原谅-我如何访问它?该网站不会中断或显示错误,如果您使用的是右上角菜单中的Chrome go to Tools>Developer Tools,它不会进行所需的更改。转到网络选项卡并选择底部的XHR。在这里,您将看到您的应用程序的任何请求。真的很有帮助
或者调试。好的-在尝试其他两种方法之前,我正在尝试方法3。正如您正确指出的,通过使用URL“/types/”+$brand,它试图加载//localhost/types/1,这是不正确的。因此,我将URL更改为“/laravel/public/types/”+$brand。奇怪的是,这导致页面重复两次寻找//localhost/laravel/public/laravel/public/types/1,即/laravel/public!有什么想法吗?你现在的代码是什么?如果没有您正在使用的代码片段,很难回答您的问题。您发布的字符串应该可以工作。你确定你有/laravel/。。。而不是拉威尔/。。。?此外,我建议您使用方法1或2。因为这样你就可以在一个域上发布你的项目而不用修改你的代码。啊,这是一个有趣的观点。回到一个步骤-当我上传这个网站到我的主机服务器-我如何让我的域名指向正确的地方?目前,它自然会转到我的公用文件夹中的索引文件,但我可能需要将整个Laravel文件夹结构放在那里。如何将URL指向正确的文件?是否要指向公共目录?是。如果您自己主持,或在VPS上主持,则可以使用上述方法2轻松完成。如果你把它放在一个网络托管服务上,可能会有一个公共的html文件夹,你可以上传到其中。那是你的公用文件夹。将公共目录的内容上传到那里,其余内容上传到外面。在那之后,只需在bootstrap/path.php.OK中更改公共路径——在尝试其他两种方法之前,我正在尝试方法3。正如您正确指出的,通过使用URL“/types/”+$brand,它试图加载//localhost/types/1,这是不正确的。因此,我将URL更改为“/laravel/public/types/”+$brand。奇怪的是,这导致页面重复两次寻找//localhost/laravel/public/laravel/public/types/1,即/laravel/public!有什么想法吗?你现在的代码是什么?如果没有您正在使用的代码片段,很难回答您的问题。您发布的字符串应该可以工作。你确定你有/laravel/。。。而不是拉威尔/。。。?此外,我建议您使用方法1或2。因为这样你就可以在一个域上发布你的项目而不用修改你的代码。啊,这是一个有趣的观点。回到一个步骤-当我上传这个网站到我的主机服务器-我如何让我的域名指向正确的地方?目前,它自然会转到我的公用文件夹中的索引文件,但我可能需要将整个Laravel文件夹结构放在那里。如何将URL指向正确的文件?是否要指向公共目录?是。如果您自己主持,或在VPS上主持,则可以使用上述方法2轻松完成。如果你把它放在一个网络托管服务上,可能会有一个公共的html文件夹,你可以上传到其中。那是你的公用文件夹。将公共目录的内容上传到那里,其余内容上传到外面。之后,只需在bootstrap/path.php中更改公共路径。