2011-01-27 35 views
5

Tôi muốn gửi những biến qua AJAX:URL trong AJAX POST

 <div class="vIn" id="star"> 
     <div id="inner"> 
     <span id="1" class="disabled"></span> 
     <span id="2" class="disabled"></span> 
     <span id="3" class="disabled"></span> 
     <span id="4" class="disabled"></span> 
     <span id="5" class="disabled"></span> 
     <input type="hidden" id="<?php echo $_GET['cID']?>" /> 
     </div> 
     </div> 

Với kịch bản này:

$(document).ready(function(){ 
$('#inner span').click(function(){ 
    $(this).prevAll().andSelf().addClass('enabled'); 
    var a = $(this).attr("id"); 
    var cID = $("#inner input").attr("id"); 
    $.ajax({ 
      type: "POST", 
      url: "ajax/rating.php", 
      data: "value=+a+&cID=+cID+", 
      success: function(msg){ 
      alert(data); 
      } 
     }); 
    });}); 

Trên sự kiện nhấp chuột, không có cảnh báo. Tôi có sử dụng đúng dữ liệu trong $ .ajax không? Cảm ơn trước.

+0

Bạn có đang cố cảnh báo phản hồi từ yêu cầu AJAX của mình không? –

+1

phải là: dữ liệu: "value =" + a + "& cID =" + cID, –

+0

@Haim: Không, không nên. Nó thường * là *, nhưng nó không nên. (Xem 'encodeURIComponent' trong tham chiếu JavaScript yêu thích của bạn.) ;-) –

Trả lời

6

Tôi rất muốn giới thiệu cho phép jQuery để lo lắng về việc đúng cách mã hóa các chuỗi:

var a = $(this).attr("id"); 
var cID = $("#inner input").attr("id"); 
$.ajax({ 
    type: "POST", 
    url: "ajax/rating.php", 
    data: {value: a, cID: cID}, // <== change is here 
    success: function(msg){ 
     alert(msg); 
    } 
}); 

Lưu ý rằng tôi đang đi qua data vào $.ajax như một đối tượng, không phải là một chuỗi. jQuery sẽ mã hóa chính xác nó cho bạn. Xem the docs để biết chi tiết.

Nếu bạn thực sự, thực sự muốn làm mã hóa chính mình, bạn phải làm điều đó một cách rõ ràng:

data: "value=" + encodeURIComponent(a) + "&cID=" + encodeURIComponent(cID) 

Cũng lưu ý rằng tôi đang cảnh báo msg, không data, vì đó là những gì bạn đã được gọi là đối số phản hồi cho success.

2

Có một lỗi tinh tế ở đây ...

 success: function(msg){ 
     alert(data); 
     } 

Bạn có thể sửa chữa nó như thế này ...

 success: function(data){ 
     alert(data); 
     } 

Có một lỗi ở đây ...

data: "value=+a+&cID=+cID+", 

Tôi nghĩ rằng điều này sẽ là ...

data: "value=" + a + "&cID=" + cID, 

Nếu bạn vẫn không nhận được cảnh báo, hãy hét lên!

+1

Hoặc' dữ liệu: {giá trị: a, cID: cID} 'sẽ tốt hơn vì nó sẽ xử lý mã hóa giá trị. –

+0

@Felix - bỏ phiếu cho nhận xét đó - đề xuất tốt. – Fenton

0

Tôi không phải là chuyên gia Javascript nhưng không được là data: "value="+a+"&cID="+cID?

+0

Không, không nên. Nó có thể là 'data:" value = "+ encodeURIComponent (a) +" & cID = "+ encodeURIComponent (cID)', nhưng hoàn toàn không phải là 'data:" value = "+ a +" & cID = "+ cID'. –

0

data: "value=+a+&cID=+cID+" đang cố gắng ghép các giá trị mà không cần quan tâm đến các ký tự có ý nghĩa đặc biệt. URL có thể bao gồm, ví dụ: ký tự &.

Đó là những gì nó đang cố gắng để làm, những gì nó thực sự làm là thiết lập chuỗi chữ là giá trị. Nỗ lực bao gồm các biến chỉ làm cho chúng dữ liệu chuỗi.

Bạn nên có:

data: { "value": a, "cID": cID } 
+0

Để chính xác: 'dữ liệu:" giá trị = + a + & cID = + cID + "' không nối bất kỳ thứ gì. Nó là một chuỗi. –

+1

@Felix - Lưu ý việc sử dụng từ "cố gắng" và toàn bộ đoạn thứ hai của câu trả lời của tôi. – Quentin

+0

Dorward: Mmh true. Tuy nhiên, mã không thể * thử *. Nhưng dù sao, không có cảm giác khó khăn ... –

0

Có một vài vấn đề với việc bạn sử dụng $ .ajax

data: "value=+a+&cID=+cID+", 

'+' là các nhà điều hành nối, những gì bạn đang làm gì ở đây là xây dựng chuỗi dữ liệu bằng cách sử dụng các biến mà bạn đã đặt trước đó. Vì vậy, bạn cần phải concat biến của bạn với các chuỗi "value =" vv

ví dụ:

data: "value="+a+"&cID="+cID,