ここに奇妙な問題があります。
次の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') を転送すると、テキストエリアに 'aaa,aaaa,aaaaa' が表示されます。これが私が欲しいものです。
次に、送信ボタンをクリックしますが、テキストエリアの $_POST 変数で「aaa、aaaa、aaaaa」を取得する代わりに、「aaa、aaaa」のみを取得します。
私が気づいたいくつかのこと:
- 'aaa,aaaa' transfer は $_POST に正しく表示されます。
- 'aaaaaa' 転送は $_POST に正しく表示されます。
- 'aaa,aaaaa' transfer は $_POST に正しく表示されます。
- 'b' の同様のバリエーションで、同じエラーと成功が表示されます。
- 転送された 'UT1,UT2,UT3,UT4,UT5' は $_POST に正しく表示されます。
- *テキストエリアに「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);
}