2009-06-08 6 views
15

Tôi không phải là rất tốt tại jQuery nhưng quyết định sử dụng jEditable plugin cho trang web của tôi bởi vì tôi nghĩ rằng nó trông tốt và giải quyết mục đích. Tuy nhiên, bây giờ tôi đang bị rối loạn.làm thế nào để có được ra khỏi jquery (jeditable) mess

Tôi đã sử dụng plugin này để chỉnh sửa dữ liệu và dữ liệu đã chỉnh sửa được gửi tới DB và một số trường được cập nhật bởi nó. thủ tục được lưu trữ cập nhật các trường này sẽ trả lại một số dữ liệu. Tôi muốn dữ liệu này được trả lại cho tôi. Tôi chỉ muốn xem dữ liệu trả về trong câu lệnh 'alert' trước, sau đó tôi có thể lấy nó từ đó.

Phương thức gọi lại của plugin này chỉ có giá trị và cài đặt.

Có cách nào để lấy lại một số dữ liệu từ phía máy chủ khi sử dụng plugin này không?

Trả lời

3

URL bạn đang gửi cập nhật (sẽ là một loại trang động như PHP, JSP, Java servlet, v.v.) thêm giá trị trả về từ thủ tục đã lưu vào phản hồi? Nếu vậy, tôi hy vọng dữ liệu đó sẽ hiển thị trong trường "giá trị" mà chúng chuyển đến cuộc gọi lại.

Khi tôi sử dụng bản trình diễn trực tuyến jEditable, câu trả lời chỉ bao gồm văn bản cập nhật, nhưng đó là chức năng của mã PHP cụ thể mà họ đang sử dụng và không liên quan gì đến mã jEditable javascript.

0

Có vẻ như jEditable là một trình bao bọc xung quanh các phương thức jquery ajax. Sẽ không quá khó để thay thế tất cả các cuộc gọi jEditable của bạn bằng các cuộc gọi sử dụng phương thức ajax gốc của jquery.

Bạn có thể thay thế gọi lại của jEditable có tên 'gọi lại' bằng 'thành công', đó là tên của hàm gọi lại trong hàm ajax của jquery.

14

Tôi đã thực hiện chính xác điều này cho trang web của mình. Điều này sẽ giúp bạn bắt đầu.

$("#editable_text").editable(submitEdit, { 
      indicator : "Saving...", 
      tooltip : "Click to edit...", 
      name : "Editable.FieldName", 
      id : "elementid", 
      type : "text", 
}); 
function submitEdit(value, settings) 
{ 
    var edits = new Object(); 
    var origvalue = this.revert; 
    var textbox = this; 
    var result = value; 
    edits[settings.name] = [value]; 
    var returned = $.ajax({ 
      url: "http://URLTOPOSTTO", 
      type: "POST", 
      data : edits, 
      dataType : "json", 
      complete : function (xhr, textStatus) 
      { 
       var response = $.secureEvalJSON(xhr.responseText); 
       if (response.Message != "") 
       { 
        alert(Message); 
       } 
      } 
      }); 
    return(result); 
} 

Bạn cần phải trả lại một phản ứng Json dạng

{ "Message" = "FOO"}

Và đó sẽ được hiển thị trong cảnh báo.

+0

+1 Có thể liên kết nút gửi với nút tự tạo không? – Roylee

+0

Một nitpick nhỏ, nhưng phản ứng Json này không * khá * Json ... 's/= /: /' :-) – mgilson

9

Tôi đã làm việc trong ASP cổ điển cố gắng giải quyết vấn đề này quá, và đã tìm người khác như tôi có thể kết thúc ở đây quá. Đây là cách tôi đã được giải quyết vấn đề này trong ASP cổ điển:

Không máy chủ xác nhận ... phản hồi từ whatever.asp

<% 
response.status "406 Not Acceptable" 
response.write "error message here" 
response.end 
%> 

Dù thông báo lỗi whatever.asp gửi có thể được truy cập thông qua onerror: và trường sẽ được đặt lại về giá trị ban đầu.

$("#editable_text").editable("whatever.asp", { 
    indicator : "Saving...", 
    tooltip : "Click to edit...", 
    type : "text", 
    onerror: function (settings, original, xhr) { 
     original.reset(); 
     //do whatever you want with the error msg here 
     alert(xhr.responseText); 
    }  
}); 

(và nếu giá trị vượt qua xác thực máy chủ, chỉ phản hồi.viết bất cứ điều gì giá trị được cập nhật là)

+1

+1 để đề cập đến onerror, hoạt động, nhưng dường như không được ghi lại. Tuy nhiên, tôi nghĩ rằng một 403 sẽ thích hợp hơn 406, vì 406 là đặc biệt về tiêu đề Accepts. – Brilliand

0

Các tài liệu cho biết các tham số đầu tiên của hàm 'callback' là "giá trị":

'callback': function (value, settings) { 
... 

gì tài liệu làm không nói là "giá trị" ở đây là bất cứ điều gì máy chủ viết ra. Nó không chỉ giới hạn ở giá trị thô. Tôi gửi lại cấu trúc được mã hóa JSON, do đó, dòng đầu tiên của hàm gọi lại của tôi là:

var updateInfo = JSON.parse(value); 

Và sau đó tôi kéo trường khi cần thiết từ cấu trúc updateInfo.