2009-03-03 22 views
31

Tôi cần đặt biến PHP $ _SESSION bằng jQuery. NẾU người dùng nhấp vào một hình ảnh tôi muốn lưu một phần thông tin liên quan đến hình ảnh đó dưới dạng biến phiên trong php.

Tôi nghĩ rằng tôi có thể thực hiện điều này bằng cách gọi một trang hoặc chức năng php và thêm phần thông tin đó vào chuỗi truy vấn.

Mọi ý tưởng. Tôi đã tìm thấy rất ít trợ giúp thông qua google.

nhờ mike

Trả lời

68

Bạn không thể thực hiện điều đó thông qua jQuery một mình; bạn sẽ cần một sự kết hợp của Ajax (mà bạn có thể làm với jQuery) và một back-end PHP. Một phiên bản rất đơn giản có thể trông như thế này:

HTML:

<img class="foo" src="img.jpg" /> 
<img class="foo" src="img2.jpg" /> 
<img class="foo" src="img3.jpg" /> 

Javascript:

$("img.foo").onclick(function() 
{ 
    // Get the src of the image 
    var src = $(this).attr("src"); 

    // Send Ajax request to backend.php, with src set as "img" in the POST data 
    $.post("/backend.php", {"img": src}); 
}); 

PHP (backend.php):

<?php 
    // do any authentication first, then add POST variable to session 
    $_SESSION['imgsrc'] = $_POST['img']; 
?> 
+18

Thiếu session_start(); trên backend khác hơn thế, đây là mẹo tuyệt vời! Cảm ơn Luke ... – Codex73

7

Có thể muốn thử đặt chức năng PHP trên một trang PHP, và sử dụng một cuộc gọi AJAX để đặt biến.

5

Những gì bạn đang tìm kiếm là jQuery Ajax. Và sau đó chỉ cần thiết lập một trang php để xử lý yêu cầu.

5

Rất nhiều câu trả lời ở đây là giải quyết như thế nào nhưng không phải là lý do tại sao. Các cặp khóa/giá trị PHP $ _SESSION được lưu trữ trên máy chủ. Điều này khác với một cookie, được lưu trữ trên trình duyệt. Đây là lý do tại sao bạn có thể truy cập các giá trị trong cookie từ cả PHP và JavaScript. Để làm cho vấn đề tồi tệ hơn, yêu cầu AJAX từ trình duyệt không bao gồm bất kỳ cookie nào bạn đã đặt cho trang web. Vì vậy, bạn sẽ phải làm cho JavaScript kéo cookie ID phiên và bao gồm nó trong mọi yêu cầu AJAX cho máy chủ để có thể tạo đầu hoặc đuôi của nó. Về mặt tươi sáng, Phiên PHP được thiết kế để chuyển sang biến HTTP GET hoặc POST nếu cookie không được gửi cùng với tiêu đề HTTP. Tôi sẽ xem xét một số nguyên tắc của các ứng dụng web RESTful và sử dụng các mẫu thiết kế phổ biến với các loại ứng dụng đó thay vì cố gắng mangle với trình xử lý phiên.

3

Tôi cũng đã thiết kế một "php phiên giá trị setter" giải pháp của bản thân mình (tương tự như giải pháp Luke Dennis'. Không có vấn đề lớn ở đây), nhưng sau khi cài đặt giá trị phiên tôi, nhu cầu của tôi là " nhảy lên tệp .php khác ". Ok, tôi đã làm điều đó, bên trong mã jquery của tôi ... Nhưng một cái gì đó không hoàn toàn công việc ...

Vấn đề của tôi là loại dễ dàng:

-Sau khi "$ .post" giá trị của bạn lên tệp .php nhỏ, bạn nên đợi một số giá trị trả về "thành công/thất bại" và CHỈ SAU ĐỌC KẾT QUẢ THÀNH CÔNG NÀY, thực hiện bước nhảy. Nếu bạn ngay lập tức nhảy lên cái lớn tiếp theo.Tệp php, giá trị phiên của bạn có thể chưa được đặt vào công cụ chạy phiên php, và bạn có thể sẽ đọc "trống" khi thực hiện $ _SESSION ["my_var"]; từ tệp .php đích.

Trong trường hợp của tôi, để sửa chữa tình huống đó, tôi đã thay đổi jQuery $ .post mã của tôi theo cách này:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){ 
    if(ret==0){ 
     window.alert("success!"); 
     location.replace("next_page.php"); 
    } 
    else{ 
     window.alert("error!"); 
    } 
}); 

Tất nhiên, "set_session_value.php" tập tin của bạn, nên trở lại 'echo "0"; 'hoặc' echo "1"; '(hoặc bất kỳ giá trị thành công nào bạn có thể cần).

Chúc mừng.

1

Tương tự như câu trả lời của Luke, nhưng với GET.

Đặt mã php này trong trang php, ví dụ: getpage.php:

<?php 
$_SESSION['size'] = $_GET['size']; 
?> 

Sau đó, gọi nó với một kịch bản jQuery như thế này:

$.get("/getpage.php?size=1"); 

Đồng ý với Federico. Trong một số trường hợp, bạn có thể gặp sự cố khi sử dụng POST, mặc dù không chắc chắn liệu nó có thể liên quan đến trình duyệt hay không.

0

Nó hoạt động trên firefox, nếu bạn thay đổi onClick() để nhấp() trong phần javascript.

$("img.foo").click(function() 
 
{ 
 
    // Get the src of the image 
 
    var src = $(this).attr("src"); 
 

 
    // Send Ajax request to backend.php, with src set as "img" in the POST data 
 
    $.post("/backend.php", {"img": src}); 
 
});

Các vấn đề liên quan