这是一个奇怪的问题。
我有以下 javascript 代码:
function doTransfer(target, source)
{
var targetObj = f_getElement(target);
var tempText = targetObj.value.split(',');
var len = tempText.length;
var targetText = new Array;
var text;
var selection;
var split;
for(var i = 0; i < len; i ++)
{
text = trim(tempText[i]);
if(text)
targetText.push(text);
}
var sourceObj = f_getElement(source);
len = sourceObj.options.length;
for(i = 0; i < len; i++)
{
split = sourceObj.options[i].value.split('_');
selection = decode_base64(split[1]);
// When searching for existing word, we ignore case as different words may be indicated by different use of case on the same letters.
// i.e. we trust the user to get it right.
if(sourceObj.options[i].selected && (searchArray(targetText, selection) == -1))
targetText.push(selection);
}
targetObj.value = targetText.join(',');
}
function f_getElement(id)
{
return document.getElementById(id);
}
这一切都很好,并将多个选择(base64_encoded)从选择框传输到目标文本区域(base64_decoded——此处未显示 javascript 代码)。
假设我转移了 3 个选择('aaa'、'aaaa'、'aaaaa'),然后我在 textarea 中得到 'aaa,aaaa,aaaaa'。这就是我要的。
然后我单击提交按钮,但是,我没有在 textarea 的 $_POST 变量中获取“aaa,aaaa,aaaaa”,而是只得到“aaa,aaaa”。
我注意到的一些事情:
- 'aaa,aaaa' 转移在 $_POST 中正确显示。
- 'aaaaa' 转移在 $_POST 中正确显示。
- 'aaa,aaaaa' 转移在 $_POST 中正确显示。
- 相同的错误和成功出现在“b”的类似变体中。
- 'UT1,UT2,UT3,UT4,UT5' 转移在 $_POST 中正确显示。
- *如果我在 textarea 中输入'aaa,aaaa,aaaaa',它会在 $_POST 中正确显示。*
我很困惑,不知道从哪里开始追查问题。
问候,
标记
网关功能:
/**
* Gateway to AJAX javascript functions
* @param input - JSON string representing an array of sets of instructions to be processed in numerical order. At the very
* least a startFunction() method should be present in each set.
*/
function gateway(input)
{
var parsedInput = JSON.parse(input);
var inputLen = parsedInput.length;
if(gateway.aobj_index == undefined)
gateway.aobj_index = -1;
gateway.aobj_index++;
for(var i = 0; i < inputLen; i++)
{
if(parsedInput[i].startFunction != undefined)
{
A_OBJ[gateway.aobj_index] = new AJAXOBJECT();
A_OBJ[gateway.aobj_index].input = parsedInput[i];
A_OBJ[gateway.aobj_index].evalReturn = eval('(' + A_OBJ[gateway.aobj_index].input.startFunction + '())');
if(A_OBJ[gateway.aobj_index].evalReturn == false)
{
return false;
}
}
else
{
alert('No startFunction() defined');
return false;
}
gateway.aobj_index++;
}
return true;
}
/**
* The object used for independent AJAX instances
*/
function AJAXOBJECT()
{
//properties
this.input = null;
this.processedScript = null;
this.phpResponse = null;
this.targetObj = null;
this.evalReturn = null;
// methods
this.checkInput = checkInput;
this.doXmlHttp = doXmlHttp;
}
/**
* Check required input parameters are present in input
* @param input array
* @return false|true
*/
function checkInput(inputArray)
{
var len = inputArray.length;
for(var i = 0; i < len; i++)
{
if(this.input[inputArray[i]] == undefined)
{
alert('required input parameter is missing: ' + inputArray[i]);
return false;
}
}
return true;
}
/**
* Create the xmlHttp object
* @return xmlHttp object
*/
function createXmlHttpObject()
{
var xmlHttp = false;
//Check if we are using IE.
try
{
//If the javascript version is greater than 5.
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
//If not, then use the older active x object.
try
{
//If we are using IE.
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
//Else we must be using a non-IE browser.
xmlHttp = false;
}
}
//If we are using a non-IE browser, create a JavaScript instance of the object.
if (!xmlHttp && typeof XMLHttpRequest != undefined)
{
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
/**
* Execute the xmlHTTP object
*
* @return true|false
*/
function doXmlHttp()
{
if(this.targetObj == null)
{
alert('No AJAXOBJECT targetObj property set');
return false;
}
if(this.processedScript == null)
{
alert('No AJAXOBJECT processedScript property set');
return false;
}
var targetObj = this.targetObj;
var xmlHttp = createXmlHttpObject();
xmlHttp.open("GET", this.processedScript, true);
//alert(this.processedScript);
xmlHttp.onreadystatechange = function()
{
if((xmlHttp.readyState == 4) && (xmlHttp.status == 200))
{
try
{
this.phpResponse = JSON.parse(xmlHttp.responseText);
}
catch(err)
{
alert('HTTP status: ' + xmlHttp.status + '. ' + err.message + ' ERROR. PHP says:\n' + xmlHttp.responseText);
return false;
}
if(this.phpResponse.ERROR)
{
alert('PHP ERROR:\n' + this.phpResponse.ERROR);
return false;
}
if(this.phpResponse.innerHTML)
targetObj.innerHTML = this.phpResponse.innerHTML;
//alert(this.phpResponse.next);
// Further action to be taken?
if(this.phpResponse.next != undefined)
gateway(JSON.stringify([this.phpResponse]));
}
}
xmlHttp.send(null);
A_OBJ[gateway.aobj_index].xmlHttp = xmlHttp;
return true;
}
/**
* Get an object for the requested HTML element ID
* @return element object
*/
function f_getElement(id)
{
return document.getElementById(id);
}