2013-05-07 21 views
6

是否可以將預定義變量傳遞給成功調用jQuery $ .get請求的函數?

如PHP腳本下面的例子將返回「吧」:

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

因此,我的目標是一個警告框,宣佈「foobar的」走向世界。

謝謝。

+0

JavaScript函數是閉包。除了引用變量之外,不需要做任何事情。 – 2013-05-07 20:12:58

+0

......這樣說,另一種選擇是從'$ .get()'返回'jqxhr'對象併爲其添加屬性。該對象將作爲回調的第三個參數以及'this'值提供,允許您檢索該屬性。這有助於使您的功能可重用。 – 2013-05-07 20:15:00

回答

3

由於JavaScript範圍的工作原理,您不需要通過它,extra將在回調中可用。所以:

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

哦哇......有時候我覺得它太簡單了......但是謝謝! – Matte 2013-05-07 21:41:58

+0

我可以修改'額外'變量嗎?在「get」的調用之後它會存活嗎? – Throoze 2013-08-30 10:03:28

+0

@Throoze是的,但請記住get調用是異步的。 '$ .get'後面的行將在get請求完成之前運行,如果您檢查'extra',那麼它仍將包含未修改的值。 – bfavaretto 2013-08-30 14:03:28

1

我不認爲這是可能的。但你可以使用外部變量內部功能

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

我知道這個職位是舊(ER),但我有同樣的問題,我想我會發佈下一個傢伙的解決方案。基本上,就像上面說的bfalvretto,jquery的.get()和.post()函數是異步的,所以當它獲得遠程url時,變量的值是不同的。
我的解決方案是將它的.get()部分放入它自己的單獨函數中,以限制回調的範圍。 這就是我想出的:

$("#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>"); 
    }); 
} 

希望這會有所幫助。

+0

我不知道爲什麼這在我的情況下工作,但確實如此,謝謝!我有一個'for'循環,每次迭代都會聲明一個值,但它仍然使用所有'.get'回調的最終值。 – Magicode 2015-05-28 02:12:22