2

jQueryは初めてで、単純でありながら紛らわしい問題があります。ha2。

私はこの通常のjavascript関数をjQuery関数でxmlファイルを読み取って書いています。上部で宣言されたprodPrice変数に値を割り当てるにはどうすればよいですか?スクリプトは0の値を返し続けますが、jQuery関数内で値を警告すると、必要な値を取得できました。

君たちありがとう。

function getPrice(valprodID)
{
    var prodPrice=0;

    jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml",
        success : function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    prodPrice = jQuery(this).find('prodPrice').text(); 
                    return false;
                }
            });                
        }
    })

    return prodPrice;
}
4

3 に答える 3

2

これ$.ajaxは、非同期で実行されるためです。

そして、それはあなたが一緒に働く方法を学ぶための絶好の機会です$.Deferred

function getPrice(valprodID)
{
    var prodPrice=0;

    return jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml"
    }).pipe(function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    return jQuery(this).find('prodPrice').text(); 
                }
            });                
        });
}

getPrice()次に、次のように関数を呼び出します。

getPrice(someid).done(function(prodPrice) {
    // do what you need with prodPrice 
});

jsfiddleの例を次に示します。http://jsfiddle.net/zerkms/9MgsX/1/

于 2012-06-07T03:28:04.063 に答える
0

asyncオプションをに設定する必要がありfalseます。そうでない場合は、コールバック関数で作業を行う必要があります。

于 2012-06-07T03:27:42.740 に答える
0

@xdazzによって報告されたように、@ zerkmsがDeferredまたは無名関数で示されているように、非同期を実行できます。

function getPrice(valprodID, fn)
{
    var prodPrice=0;
    jQuery.ajax({
        type: "GET",
        url: "products.xml",
        dataType : "xml",
        success : function(xml)
        {
            jQuery(xml).find('prod').each(function(){
                var prodID = jQuery(this).find('prodID').text();
                if(prodID == valprodID)
                {
                    prodPrice = jQuery(this).find('prodPrice').text(); 
                    fn(prodPrice);
                }
            });                
        }
    })

}

getPrice(1, function(prodPrice) {

   /* your code */

})
于 2012-06-07T03:48:23.703 に答える