如何在Laravel 4中使用Ajax和jQuery?
我是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格式)。 然后我创建了一个到这个控制器的路由,其function如下:
Route::get('types/{id}', array('uses'=>'IndexController@types'));
我通过转到// localhost / lavarel / public / types / 1来检查路由和function是否正常工作,实际上它返回了正确的JSON数据。
有问题的jquery函数如下:
function updateTypes($brand) { $("#type").append('Test...'); // This executes correctly $.getJSON('/types/'+$brand, function(data) { $("#type").append('Test 2...'); // This does not // Some other JSON related code });
为了测试函数的工作原理,我插入了两行来编辑我正在使用的项目。 正在添加第一个“Test”选项时正确调用该函数。 但是,它似乎永远不会激活回调函数,因为第二行测试代码没有被执行。
我怀疑问题是我提供给JavaScript '/types/'+$brand
的url。 我在一些教程中看到过在我提供的URL之前使用的BASE var,但我不明白为什么上面的代码不起作用。 有什么指针吗?
任何人都可以向我解释我哪里出错了?
您的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
。
只需用'/laravel/public/types'+$brand
替换'/types/'$brand
'/laravel/public/types'+$brand
使用HTML’base’元标记
... ...
声明此标记,您确保每个相对URL将基于项目的真实绝对URL( http://localhost/my-laravel-project/public/
),而不是基于Localhost的URL( http://localhost
)
- 从URL(如php的$ _GET)获取jQuery / Ajax的数据?
- jQuery ajax返回readyState 1或不正确的数据类型
- 如何使用jQuery ajax调用PHP函数?
- 登录Ajax成员时如何修复会话错误? – Spring MVC2
- AJAX不断寻找服务器更新? 使用Javascript
- 用async false调用jQuery ajax是行不通的
- 在具有大量数据的mvc4中的ajax发布期间,系统抛出System.ArgumentExceptionexception
- jquery $ .ajax调用在Chrome或Firefox中导致401未经授权的响应,但在IE中有效
- 在注销时自动保存“卸载”事件和ajax调用:操作顺序导致问题