Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel 4持续数据处理-jquery ajax提交_Php_Jquery_Session_Laravel_Laravel 4 - Fatal编程技术网

Php laravel 4持续数据处理-jquery ajax提交

Php laravel 4持续数据处理-jquery ajax提交,php,jquery,session,laravel,laravel-4,Php,Jquery,Session,Laravel,Laravel 4,我在laravel 4.1会话中遇到了持续的问题,并且出现了意外行为 根据我调用控制器方法的方式,会话可以工作,也可以不工作。我的应用程序会调用POST路由,将项目添加到购物车中,这是一个会话。由于某些原因,会话没有得到更新。但是,如果我使用get请求调用同一个函数,该函数将按预期工作 Myroutes.php包含以下两个路由: Route::get('testAdd', array('uses' => 'ProductsController@addToCart')); Route::p

我在laravel 4.1会话中遇到了持续的问题,并且出现了意外行为

根据我调用控制器方法的方式,会话可以工作,也可以不工作。我的应用程序会调用POST路由,将项目添加到购物车中,这是一个会话。由于某些原因,会话没有得到更新。但是,如果我使用get请求调用同一个函数,该函数将按预期工作

My
routes.php
包含以下两个路由:

Route::get('testAdd', array('uses' => 'ProductsController@addToCart'));

Route::post('products/addToCart', array('uses' => 'ProductsController@addToCart'));
两者都指向相同的方法

目前的方法如下(用于测试):

如果我使用POST方法(使用表单数据)调用函数,我将得到预期的结果和会话的内容

但是,如果我随后检查会话(使用探查器),它将不存在。数据没有持续

如果然后使用GET路由调用相同的方法,我会得到预期的结果,但重要的是会话仍然存在

我想可能是POST方法删除了会话,但是一旦它存在,它就会保留在那里-如果我使用GET方法,而sessin存在如果我再次尝试POST方法示例,会话就会保留在原来的位置-因此POST方法不会删除会话

这让我快发疯了——我为此浪费了很多时间,不知道为什么

我是不是错过了一些关于拉威尔如何处理v后GET的事情?为什么两种不同的方法会对底层函数产生不同的影响

我需要做什么才能使会话在POST中正常工作

更新:

我现在已经尝试了会话的数据库驱动程序,并且得到了相同的行为

我把我的测试进行了一个更进一步的阶段——我创建了一个基本表单并提交到url,该方法按预期工作。我当前的表单数据是由jqueryajax提交的,并假设它们在behviour中相当相同

我的jquery提交功能如下:

$.ajax({
     url: '/products/addToCart',
     type: 'POST',
     async: false,
 })
     .done(function() {
         console.log("success");
     })
     .fail(function() {
         console.log("error");
     })
     .always(function() {
         console.log("complete");
     });

 return false;
我将async设置为false-我假设等待服务器响应。(如果为真,也不起作用)

因此,问题在于表单提交和ajax提交之间的细微差别。两种方法都使用相同的路由和方法-一种保存会话数据-另一种不保存


我怎样才能克服?Jquery提交对于应用程序的这一部分至关重要。

成功

我发现了一个与laravel 3相关的类似问题。为了使会话保持在ajax调用中,我需要正确返回响应

return json_encode($response);
这就是问题的根源。它不是一个有效的响应,可以使会话持久化。我把它改成:

return Response::json($response); 
这使会话得以持续

出于某种原因,普通表单提交或调用方法允许第一个表单提交或调用,但ajax不允许

我在其他地方看到过关于方法中影响会话数据的echo语句的引用,但我认为我没有——我认为返回的行为必须类似于echo

快乐现在(直到下一个问题)

这是触发解决方案的帖子:

我也有同样的问题,但是当返回XML响应时,不是JSON

我使用会话保存修复了它

\Session::put('LOGADO.ID_LOJA', $id_loja.time());

\Session::save();

这修复了AJAX调用中的所有问题。

这是参考Ray给出的解决方案。 我有一个非常类似的问题,你的解决方案解决了。最初,我的控制器上有以下功能:

echo json_encode(array('auth' => $auth));
我将此更改为:

return Response::json(array('auth' => $auth));
然而,这只是解决方案的一部分。在我的javascript文件中,我最初有:

data = $.parseJSON(data);

如果我把回声留在控制器里的话,我就需要它了。显然,当使用Response::json()时,Laravel会在幕后发挥一些魔力,以便返回的数据已经被解析。删除我的javascript文件中的这一行让一切再次变得愉快:)

你可以尝试一种不同的会话方法,也许可以排除一些事情。不过这个问题很有用!我将尝试使用一个数据库-目前正在使用的文件,先生,您刚刚使我的一天。我一直有同样的问题(见)。我正在使用Laravel4.1以及以下设置:PHP5.5.12,会话驱动程序“文件”。你的方法也解决了我的问题!很高兴这有帮助。我在这个问题上浪费了很多时间——当我解决这个问题时,我几乎要举行一个派对来庆祝。当你找到答案时,这是有意义的。实际上,这对我来说没有意义…当返回JSON字符串时,Laravel会自动输出它…如果它自动这样做,我看不出为什么我们必须手动调用响应类来为我们做JSON响应,并确保会话是持久的。我在我的构建中注意到了这一点它并不总是作为json输出。在我的原始代码中,我的返回没有被javascript代码识别为json。在框架中,
return$response
return-json\u-encode($response)
return-response::json($response)
之间必须有一个额外的步骤,但我知道的还不够深入!我花了一整天在这上面!
data = $.parseJSON(data);