2011-11-24 34 views
5

tôi có một vấn đề rất ít nhưng không biết cách giải quyết nó. Tôi cần gửi một JSON với một hàm, nhưng với các tham số và đây là vấn đề của tôi.JSON có giá trị hàm với tham số

Gửi một hàm trong JSON rất đơn giản:

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: function(){ alert('something'); } }; 

tôi cần cái gì khác, cần phải vượt qua chức năng Func như tham số với các thông số.

Ví dụ:

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: funcParam(param1,param2) }; 
function(parameter1, parameter2){ 
    alert(parameter1 + parameter2); 
} 

Nhưng điều này không có tác dụng :(

Bất kỳ sự giúp đỡ với điều này sẽ được thực sự appreaciated

+5

Đó không phải là JSON. JSON không có khái niệm về hàm. Nó chỉ đơn giản là một đối tượng JavaScript. Bạn phải rõ ràng hơn về những gì bạn muốn gửi, ở đâu và như thế nào. –

Trả lời

1

Đó là một chút không rõ ràng những gì bạn muốn, nhưng nếu bạn muốn xác định hàm nhận thông số, bạn sẽ muốn một cái gì đó như thế này;

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: function(param1, param2){ alert(param1 + param2); } }; 
0

Bạn có thể c reate một chức năng đã đóng cửa trên các đối số:

var send_func = (function(param1, param2) { 
    return function(){ 
     alert(param1 + param2); 
    }; 
}(3, 4)); 

var jsVariable = { var1 : 'value1', var2 : 'value2', func: send_func }; 

Vì vậy, hàm bên ngoài trên được gọi, nhận các đối số và trả về một hàm khi được gọi sử dụng các đối số ban đầu đó.

another_func(jsVariable); 

function another_func(obj) { 

    obj.func(); // 7 

} 

Tất nhiên điều này không liên quan gì đến JSON. Bạn sẽ không thể tuần tự hóa bất kỳ phần nào của các chức năng.

1

Bạn đang tìm cách có thể chuyển bất kỳ số tham số nào vào hàm này? Nếu vậy, hãy thử đi qua một mảng đến chức năng của bạn và lặp qua, ví dụ:

var jsonVariable = { 
    var1 : 'value1', 
    var2 : 'value2', 
    func: function(params){ 
     var alertString = ""; 
     for (var i = 0; i < params.length; i++) 
      alertString+=params[i]+" "; 
     alert(alertString); 
    } 
}; 

và gọi nó bằng cách sử

jsonVariable.func(["param1", "param2"]); 

Fiddle

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