2012-03-02 10 views
6

Tôi có một biến phiên ColdFusion là cấu trúc dữ liệu. Mục tiêu của tôi là thực hiện một cuộc gọi jQuery thực hiện một trong hai điều thông qua Ajax:Truyền và trả lại Cấu trúc ColdFusion qua JQuery

  1. gửi cấu trúc ColdFusion đó thành một phương thức thành phần ColdFusion, cập nhật cấu trúc đó với một chuỗi mới được tạo ra. trở lại.

hoặc

  1. thực hiện một phương pháp thành phần ColdFusion tạo ra một chuỗi mới, trả về chuỗi, và gán chuỗi mới để một phần tử của cùng cấu trúc phiên ColdFusion sau khi cuộc gọi Ajax.

Tôi nghĩ nó sẽ dễ dàng, nhưng tôi đã gặp một số vấn đề. Có ai biết tôi cần làm gì không?

Trả lời

10

Vâng, cấu trúc phiên CF và jQuery hoạt động trong hai lĩnh vực khác nhau - CF trên máy chủ và jQuery trong trình duyệt. Để "gửi cấu trúc Coldfusion đó tới một [cfc] ..." từ Ajax, bạn sẽ phải tuần tự hóa cấu trúc phiên làm chuỗi json và sau đó truyền chuỗi json đó tới máy khách bằng cách nào đó. Nhiều khả năng, bạn sẽ muốn làm điều này như là một phần của đồ họa của trang để khách hàng:

<cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput> 

Sau đó, bạn có thể sử dụng các biến jsonStruct từ mã jQuery của bạn khi cần thiết (như là một đối tượng JS thực). Khi bạn cần phải gửi nó trở lại CF, bạn có thể serialize nó một lần nữa ở phía bên Javascript, giống như sau:

$.ajax({ 
    url: "foo.cfc?method=myMethod", 
    dataType: "json", 
    data: {myStruct: JSON.stringify(jsonStruct)}, 
    success: function (respJSON) { 
     jsonStruct = respJSON; 
    } 
}); 

Lưu ý rằng bạn nên bao gồm json2.js để làm serialization, vì một số trình duyệt ho IE ho không hỗ trợ JSON.stringify() nguyên bản.

Cập nhật

Tôi đã cập nhật mã jquery ví dụ cho thấy làm thế nào bạn có thể cập nhật các đối tượng javascript để sử dụng phản hồi từ CFC. Để hoạt động bình thường, CF của bạn sẽ cần phải trông giống như sau:

<cffunction name="myMethod" access="remote" returnFormat="json"> 
    <cfargument name="myStruct" type="string"> 

    <cfset var realStruct = DeserializeJSON(arguments.myStruct)> 

    <cfset session.myStruct = realStruct><!--- or whatever you want to do with it at this point ---> 

    <cfreturn session.myStruct> 
</cffunction> 
+0

Vì vậy, tôi sử dụng SerializeJSON để tạo jsonStruct đó để gửi đến thành phần CF. JSON.stringify làm cho nó một cấu trúc trong CF đúng không? Khi tôi trả về cấu trúc trở lại thành công, làm cách nào để gán cấu trúc phiên đã thay đổi trở lại cấu trúc phiên hiện tại trên trang gốc? – user1100412

+0

SerializeJSON là một hàm CF có đối tượng CF và hiển thị nó dưới dạng một chuỗi. JSON.stringify là một hàm javascript nhận một đối tượng javascript và hiển thị nó dưới dạng một chuỗi. –

+0

Tôi đã cập nhật câu trả lời để cho thấy cách bạn đi qua lại giữa CFC và jQuery. –