2013-05-07 24 views
6

Có thể chuyển các biến được xác định trước cho các hàm được gọi khi yêu cầu jQuery $ .get thành công không?

Như trong ví dụ dưới đây kịch bản PHP sẽ quay trở lại "thanh":

var extra = "foo"; 
$.get(baar.php, function(data, extra){ 
    alert(extra + data); 
}); 

Do đó mục tiêu của tôi là một hộp cảnh báo tuyên bố "foobar" với thế giới.

Cảm ơn.

+0

Chức năng JavaScript bị đóng. Không cần phải làm gì hơn là chỉ tham chiếu biến. –

+0

... mà nói, một tùy chọn khác là lấy đối tượng 'jqxhr' được trả về từ' $ .get() 'và thêm các thuộc tính vào nó. Đối tượng đó sẽ có sẵn dưới dạng đối số thứ 3 cho hàm gọi lại, cũng như giá trị 'this' này, cho phép bạn truy xuất thuộc tính. Điều này giúp làm cho chức năng của bạn có thể tái sử dụng được. –

Trả lời

3

Bạn không cần phải vượt qua nó, extra sẽ có sẵn bên trong cuộc gọi lại vì cách hoạt động của tính năng quét JavaScript. Vì vậy:

var extra = "foo"; 
$.get('baar.php', function(data){ 
    alert(extra + data); 
}); 
+0

Oh wow ... đôi khi tôi đoán nó chỉ là quá đơn giản .... Cảm ơn mặc dù! – Matte

+0

tôi có thể sửa đổi biến 'extra' không? nó sẽ tồn tại sau cuộc gọi đến 'get'? – Throoze

+0

@Throoze Có, nhưng hãy nhớ rằng cuộc gọi nhận được là không đồng bộ. Dòng bên phải sau '$ .get' sẽ chạy trước khi yêu cầu nhận được hoàn tất và nếu bạn chọn' extra' ở đó, nó sẽ vẫn chứa giá trị chưa sửa đổi. – bfavaretto

1

Tôi không nghĩ là có thể. nhưng bạn có thể sử dụng biến bên ngoài bên trong hàm

var extra = "foo"; 
$.get(baar.php, function(data){ 
    alert(extra + data); 
}); 
1

Tôi biết bài đăng này cũ (er), nhưng tôi có cùng vấn đề này và nghĩ rằng tôi sẽ đăng giải pháp cho người tiếp theo. Về cơ bản, như bfalvretto đã nói ở trên, các hàm jget của .quem() và .post() không đồng bộ, do đó, vào thời điểm nó nhận được url từ xa, giá trị của biến là khác nhau.
Giải pháp của tôi là ném phần .get() của nó vào chức năng riêng biệt của nó để giới hạn phạm vi của cuộc gọi lại. Đây là những gì tôi đã đưa ra:

$("#SomethingClick").click(function(e) { 
    e.preventDefault(); 

    $.post("..getURL", { id: 123 }, function(data) { 
     for (i = 0; i < data.rows.length; i++) { 
     ExternalFunction(data.rows[i].Value1, data.rows[i].Value2); 
    } 
    }); 
}); 
... 
function ExternalFunction(value1, value2) { 
    $.get("/Core/ContactViewer/" + contactID, function (data2) { 
     $("someoutputdiv").html("<div>" + value1 + ": " + value2 + "</div>"); 
    }); 
} 

Hy vọng điều này sẽ hữu ích.

+0

Tôi không biết tại sao nó lại hoạt động trong trường hợp của tôi nhưng nó thực sự cảm ơn! Tôi đã có một vòng lặp 'for' với một giá trị được khai báo trên mỗi lần lặp nhưng nó vẫn đang sử dụng giá trị cuối cùng cho tất cả các cuộc gọi lại' .get'. – Magicode

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