2010-07-09 212 views
0

我想將一個變量傳遞給一個函數,我相信調用另一個函數(我認爲)但有問題。我需要在第二個函數中使用的變量是productid,但是我嘗試過的幾種方法都沒有奏效。無論是在JavaScript或JQuery的修復將是偉大的!需要將變量傳遞給函數

這是我需要

var error_url = '/ProductDetails.asp?ProductCode' + productid; 

這是其中變量源自於變量行...

var productid = form.elements['ProductCode'].value; 

,這裏是整個js代碼

function addToCart2(form, button) { 
var softAdd = true; 
var productid = form.elements['ProductCode'].value; 

     var qstr; 
    var bttnName = button.name; 
    button.disabled = true; 
    if (form.elements['ReturnTo']) { 
     form.elements['ReturnTo'].value = ""; 
    } 
    qstr = serialize(form, bttnName + '.x', '5', bttnName + '.y', '5'); 
      sendAjax('POST','/ProductDetails.asp?ProductCode=' + productid + '&AjaxError=Y', qstr , retrieveProductError2 ,displayServerError,false); 
    button.disabled = false; 
      return false; 
     } 
function retrieveProductError2(result, statusCode) { 
var ele = document.getElementById('listOfErrorsSpan'); 
var errorIndex = result.indexOf('<carterror>'); 
var productIndex = result.indexOf('<ProductIndex>') 
if (errorIndex > -1 && productIndex == -1) { 
var error_url = '/ProductDetails.asp?ProductCode' + productid; 
window.location = error_url; 
} 
if (errorIndex != -1) { 
    //ele.innerHTML = result.slice(errorIndex + 11, result.indexOf('</carterror>')); 
} 
else { 
    ele.innerHTML = ""; 
    if (productIndex == -1) { 
    sendAjax('GET','/AjaxCart.asp?GetIndex=True', '', showCart, null, false); 
    } 
    else { 
    productIndex = result.slice(productIndex + 14, result.indexOf('</ProductIndex>')); 
    sendAjax('GET','/AjaxCart.asp?Index=' + productIndex, '', showCart, null, false); 
    } 
} 

}

回答

1

如果您在retrieveProductError2傳遞作爲sendAjax打電話給你的錯誤回調,你可以改爲傳遞:

function(result, statusCode) { retreiveProductError2(result, statusCode, productId);} 

然後改變你的retreiveProductError2函數的定義接受額外的參數。

+0

你能解釋一下,因爲我無法理解你的答案嗎? – user357034 2010-07-09 16:41:29

+0

在第12行中,您調用'sendAjax' ...其中一個參數是'retrieveProductError2'。用上面給出的代碼替換它。然後,將第16行改爲讀取'function retrieveProductError2(result,statusCode,productId){'。然後您可以訪問retrieveProductError2函數內的productId變量。 – sje397 2010-07-09 16:46:26

+0

並確保你拼寫檢索正確 - 不像我自己:) – sje397 2010-07-09 16:47:19

2

最簡單的方法是將變量聲明移到方法之外。因此,請在addToCart2方法之外更改產品ID的聲明。因此,除此之外,您可以這樣做:

var product_id; 

然後在您的方法中將var從product_id中刪除,它只是一個賦值而不是聲明。

+0

這有效,但因爲它是使用全局變量是一種非常糟糕的編程風格。另外,當多個ajax調用同時被調用時,它可能會導致副作用。由於ajax是異步的,所以這很難防止。 – txwikinger 2010-07-09 16:22:34

+0

@txwikinger我同意。這只是一個讓他繼續前進的簡單方法。 – spinon 2010-07-09 16:26:27