簡體   English   中英

laravel 4持久化數據正在進行中-jQuery Ajax提交

[英]laravel 4 persisting data ongoing - jquery ajax submit

我在laravel 4.1會話中遇到了持續的問題,並得到了意外的行為。

根據我調用控制器方法的方式,會話是否可以工作?我的應用會調用POST路由-將商品添加到作為會話的購物車中。 由於某種原因,會話無法更新。但是,如果我使用GET請求調用相同的函數,則該函數將按預期工作。

我的routes.php包含以下兩個路由:

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

Route::post('products/addToCart', array('uses' => 'ProductsController@addToCart'));

兩者都指向相同的方法

該方法當前是這樣(用於測試):

public function addToCart() {

  Session::put("addcarttest", "add to cart");
  return json_encode(Session::get('addcarttest'));

}

如果我使用POST方法(帶有表單數據)調用該函數,則會得到預期的結果和會話的內容。

但是,如果然后我檢查該會話(使用探查器),則該會話不存在。 數據不持久。

如果我隨后使用GET路由調用相同的方法,則可以得到預期的結果,但重要的是會話仍然存在。

我以為也許POST方法刪除了會話,但是一旦存在,會話就會保留在那里-如果我使用GET方法,而sessin存在,那么如果我再次嘗試POST方法示例,則會話仍然存在-因此POST方法不會刪除會話。

這讓我發瘋-我為此花了很多時間,看不出為什么。

我是否對Laravel如何處理POST v GET有所了解? 為什么兩種不同的方法會對基礎功能有所不同?

我需要怎么做才能使會話與POST一起正常工作?

更新:

我現在已經為該會話嘗試了數據庫驅動程序,並且得到了相同的行為。

我進一步進行了測試-我創建了一個基本表單並提交給url,該方法按預期工作。 我當前的表單數據由jquery ajax提交,並假設它們的行為完全相同。

我的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-我想等待服務器響應。 (如果為true,則也不起作用)。

因此,問題在於表單提交和ajax提交之間存在細微差別。 兩種方法都使用相同的路由和方法-一種保存會話數據-另一種不保存。

我該如何克服? jQuery提交對於應用程序的這一部分至關重要。

成功!

我發現了與laravel 3有關的類似問題。為了使會話持續進行ajax調用,我需要正確返回響應。

return json_encode($response);

這引起了問題。 它不是使會話持續存在的有效響應。 我將其更改為:

return Response::json($response); 

這使會話得以持續!

由於某種原因,正常形式的提交或調用方法允許第一個,但ajax不允許。

我在其他地方已經看到了有關影響會話數據的方法中的echo語句的參考,但我認為我沒有任何意義-我認為返回的內容必須類似於echo

現在快樂(直到下一個問題)

這是觸發解決方案的帖子: http : //forumsarchive.laravel.io/viewtopic.php?id=1304

我有同樣的問題,但是返回XML響應而不是JSON時。

我使用會話保存修復了它。

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

\Session::save();

這修復了AJAX調用中的所有問題。

這是參考雷提出的解決方案。 我有一個非常類似的問題,您的解決方案已解決。 最初,我在Controller上具有以下功能:

echo json_encode(array('auth' => $auth));

我將其更改為:

return Response::json(array('auth' => $auth));

但是,這只是解決方案的一部分。 在我的javascript文件中,我最初有:

data = $.parseJSON(data);

如果我將回聲保留在控制器中,那將是需要的。 當使用Response :: json()以便返回的數據已經被解析時,Laravel顯然會在后台做一些魔術。 刪除我的javascript文件中的那一行使一切再次變得快樂:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM