2009-09-11 44 views
52

Tôi đang cố gắng đọc các tham số yêu cầu bài đăng từ html của mình. Tôi có thể đọc các tham số yêu cầu get bằng cách sử dụng mã sau trong javascript.Cách đọc tham số yêu cầu bài đăng bằng cách sử dụng javascript

$wnd.location.search 

Nhưng nó không hoạt động đối với yêu cầu bài. Mọi người có thể cho tôi biết cách đọc giá trị thông số yêu cầu bài trong html của tôi bằng javascript.

Trả lời

108

Dữ liệu POST là dữ liệu được xử lý phía máy chủ. Và Javascript ở phía khách hàng. Vì vậy, không có cách nào bạn có thể đọc dữ liệu bài đăng bằng JavaScript.

+30

Mặc dù kết luận là chính xác (bạn không thể lấy dữ liệu đó từ javascript) lý do là sai. Máy khách (trình duyệt) là trình gửi dữ liệu POST đến máy chủ ngay từ đầu. Vì vậy, khách hàng biết rất rõ dữ liệu đó là gì. Lý do thực tế đơn giản là trình duyệt không làm cho dữ liệu đó có sẵn cho javascript (nhưng nó hoàn toàn có thể). – GetFree

+0

@GetFree: Cái hay này được gọi là kiến ​​thức về các biến POST cho một nhà phát triển web? Không có nhà phát triển web nào sẽ viết kịch bản phía máy khách dựa trên trình duyệt có thể làm cho dữ liệu bài đăng có sẵn cho JavaScript kể từ khi bạn chỉ ra, nó * không bao giờ xảy ra trong thực tế *. Vì vậy, trong thế giới thực *, câu trả lời được trình bày ở đây là chính xác, cũng như của riêng tôi. –

+26

@PlatinumAzure, tôi không chắc bạn hiểu được vấn đề. Bạn nói rằng dữ liệu POST tồn tại trong máy chủ, và kể từ khi javascript chạy trong máy khách, không có cách nào mà JS có thể truy cập dữ liệu đó. Điều đó là sai, dữ liệu POST tồn tại cả trong máy khách và máy chủ và lý do tại sao JS không thể truy cập dữ liệu đó đơn giản chỉ vì trình khách (trình duyệt) không làm cho nó có sẵn cho JS. Đơn giản vậy thôi. – GetFree

5

JavaScript là ngôn ngữ kịch bản phía máy khách, có nghĩa là tất cả mã được thực thi trên máy của người dùng web. Mặt khác, các biến POST, đi đến máy chủ và cư trú ở đó. Các trình duyệt không cung cấp các biến đó cho môi trường JavaScript, cũng như bất kỳ nhà phát triển nào mong đợi chúng sẽ có mặt ở đó một cách kỳ diệu.

Do đó, không thể đọc được các biến POST. Các biến GET là một fluke, bởi vì chúng nằm trong URL và đó là thứ mà máy khách biết.

Tuy nhiên, có thể đọc giá trị của các biến POST nếu phản hồi của máy chủ phản hồi chúng thành tập lệnh.

+2

Tôi dứt khoát không đồng ý với -1 của bạn. Không nơi nào trong OP thực hiện câu hỏi chỉ định AJAX, để lá mở khả năng các nhấp chuột liên kết và gửi biểu mẫu không được JavaScript thực hiện. Đặc biệt sau là một ví dụ mà các biến POST tồn tại nhưng không có sẵn ở phía máy khách, trừ khi đáp ứng của máy chủ được tạo ra bởi một kịch bản lệnh và kịch bản chọn để lặp lại các giá trị của các biến POST vào mã JS. Nếu tôi có thể -1 bình luận của bạn, tôi sẽ. –

+1

Tôi không nói về AJAX. Đối số của tôi đề cập đến bất kỳ hình thức yêu cầu POST nào. Trình duyệt biết mọi thông số được gửi như một phần của yêu cầu HTTP, bao gồm, trong số các thông số khác, URL và thông số POST. Một số các tham số được tạo sẵn cho javascript những người khác thì không. Nó chỉ đơn giản là một hạn chế áp đặt bởi trình duyệt, nó rất có thể cho phép truy cập vào các tham số POST từ JS, nhưng nó không, đó là sự thật đơn giản. – GetFree

+0

Bạn không nhận được quan điểm của tôi. Không ai sẽ viết JavaScript mong đợi các biến POST có sẵn trừ khi máy chủ cung cấp chúng một cách rõ ràng. Nếu máy chủ không cung cấp cho họ, thì theo như một nhà phát triển web viết mã JavaScript có liên quan, họ cũng có thể không ở phía khách hàng chút nào. –

-1
$(function(){ 
    $('form').sumbit{ 
     $('this').serialize(); 
    } 
}); 

Trong jQuery, mã trên sẽ cung cấp cho bạn chuỗi URL có tham số POST trong URL. Không thể trích xuất các tham số POST.

Để sử dụng jQuery, bạn cần phải bao gồm thư viện jQuery. Sử dụng sau đây cho rằng:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></script> 
+4

Điều này sẽ chỉ nhận các thông số POST trên trang mà biểu mẫu đang được gửi ** từ **. Có vẻ như một giả định an toàn OP muốn nhận thông số POST trên trang biểu mẫu đã được gửi ** đến **. Điều đó là không thể làm được. –

18

Một đôi chút về PHP để có được máy chủ để cư một biến JavaScript là nhanh chóng và dễ dàng:

var my_javascript_variable = <?php echo $_POST['my_post'] ?>; 

Sau đó chỉ cần truy cập vào biến JavaScript theo cách thông thường.

+8

Hãy cẩn thận để thoát/thêm dấu ngoặc kép/v.v. với dữ liệu POST của bạn nếu bạn đi tuyến đường này. Một cách khác là sử dụng json_encode(), nó sẽ làm việc cho khá nhiều kiểu dữ liệu. Ví dụ: http://www.abeautifulsite.net/passing-data-from-php-to-javascript/ – claviska

+0

Bây giờ đây là những gì tôi gọi là suy nghĩ ra khỏi hộp. –

+0

Đây là cách đơn giản nhất để thực hiện điều này. Điều này làm việc cho tôi trong wordpress bằng cách tạo ra một trang chủ đề mới và chỉ đơn giản là phơi bày các dữ liệu bài ở mức cửa sổ như window.my_prefix_post_data = ; và sau đó truy cập dữ liệu bài đăng từ mọi phạm vi dễ dàng theo cách đó. Điều này sẽ không được khuyến khích cho các trang web có rất nhiều dữ liệu nhạy cảm đăng đi qua tất cả các thời gian, nhưng đối với phạm vi của trang/trang web của chúng tôi nó hoạt động tuyệt vời. –

1

POST là trình duyệt gửi từ máy khách (trình duyệt của bạn) đến máy chủ web. Dữ liệu bài đăng được gửi tới máy chủ qua tiêu đề http và nó chỉ khả dụng ở cuối máy chủ hoặc ở giữa đường dẫn (ví dụ: máy chủ proxy) từ ứng dụng khách (trình duyệt của bạn) tới máy chủ web. Vì vậy, nó không thể được xử lý từ các kịch bản phía máy khách như JavaScript. Bạn cần phải xử lý nó thông qua các kịch bản phía máy chủ như CGI, PHP, Java, vv Nếu bạn vẫn cần phải viết bằng JavaScript, bạn cần phải có một máy chủ web hiểu và thực hiện JavaScript trong máy chủ của bạn như Node.js

-1

POST các biến chỉ khả dụng cho trình duyệt nếu cùng một trình duyệt đó gửi chúng ở địa điểm đầu tiên. Nếu một biểu mẫu trang web khác gửi qua POST tới một URL khác, trình duyệt sẽ không thấy dữ liệu POST đến.

TRANG WEB: có biểu mẫu gửi tới URL bên ngoài (trang B) sử dụng POST TRANG B: sẽ nhận được khách truy cập nhưng chỉ với các biến GET

1

Bạn có thể đọc thông số yêu cầu bài đăng bằng jQuery-PostCapture (@ssut/jQuery-PostCapture).

Plugin PostCapture bao gồm một số thủ thuật.

Khi bạn nhấp vào nút gửi, sự kiện onsubmit sẽ được gửi đi.

Vào thời điểm đó, PostCapture sẽ tuần tự hóa dữ liệu biểu mẫu và lưu vào html5 localStorage (nếu có) hoặc lưu trữ cookie.

3

Tại sao không sử dụng localStorage hoặc bất kỳ cách nào khác để đặt giá trị mà bạn muốn chuyển?

Bằng cách đó bạn có quyền truy cập vào từ mọi nơi!

+2

tại sao không chỉ là một cookie đơn giản? –

+0

@jj_ Điều đó cũng có tác dụng! –

-3
<head><script>var xxx = ${params.xxx}</script></head> 

Sử dụng EL biểu thức $ {param.xxx} trong <head> để có được params từ một bài phương pháp, và chắc chắn rằng các tập tin js được bao gồm sau <head> để bạn có thể xử lý một param như 'XXX' trực tiếp của bạn tệp js.

-1

Chúng tôi có thể thu thập thông số biểu mẫu được gửi bằng cách sử dụng POST với khái niệm serialize.

Hãy thử điều này:

$('form').serialize(); 

Chỉ cần gửi kèm theo nó tỉnh táo, nó sẽ hiển thị tất cả các thông số bao gồm ẩn.

0

Bạn có thể 'json_encode' để mã hóa đầu tiên các biến bài đăng của mình thông qua PHP. Sau đó, tạo một đối tượng JS (mảng) từ các biến bài đăng được mã hóa JSON. Sau đó sử dụng một vòng lặp hoạt Javascript để thao tác các biến ... Giống như - trong ví dụ dưới đây - để cư một hình thức dạng HTML:

<script> 

    <?php $post_vars_json_encode = json_encode($this->input->post()); ?> 

    // SET POST VALUES OBJECT/ARRAY 
    var post_value_Arr = <?php echo $post_vars_json_encode; ?>;// creates a JS object with your post variables 
    console.log(post_value_Arr); 

    // POPULATE FIELDS BASED ON POST VALUES 
    for(var key in post_value_Arr){// Loop post variables array 

     if(document.getElementById(key)){// Field Exists 
      console.log("found post_value_Arr key form field = "+key); 
      document.getElementById(key).value = post_value_Arr[key]; 
     } 
    } 


</script> 
-1
function getParameterByName(name, url) { 
      if (!url) url = window.location.href; 
      name = name.replace(/[\[\]]/g, "\\$&"); 
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 
       results = regex.exec(url); 
      if (!results) return null; 
      if (!results[2]) return ''; 
      return decodeURIComponent(results[2].replace(/\+/g, " ")); 
     } 
var formObj = document.getElementById("pageID"); 
formObj.response_order_id.value = getParameterByName("name"); 
+0

Đây là biến GET, OP được hỏi cụ thể cho POST var và lưu ý rằng anh ta đã có các biến GET dễ dàng. –

0

Một lựa chọn là để thiết lập một cookie trong PHP.

Ví dụ: cookie có tên không hợp lệ với giá trị của $invalid hết hạn trong 1 ngày:

setcookie('invalid', $invalid, time() + 60 * 60 * 24); 

Sau đó đọc nó lại ra trong JS (sử dụng các plugin JS Cookie):

var invalid = Cookies.get('invalid'); 

if(invalid !== undefined) { 
    Cookies.remove('invalid'); 
} 

Bây giờ bạn có thể truy cập giá trị từ biến số invalid trong JavaScript.

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