需要将变量传递给函数

问题描述:

我想将一个变量传递给一个函数,我相信调用另一个函数(我认为)但有问题。我需要在第二个函数中使用的变量是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); 
    } 
} 

}

如果您在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

最简单的方法是将变量声明移到方法之外。因此,请在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