【发布时间】:2023-02-11 10:08:32
【问题描述】:
我有接受数组作为参数的现有 PHP。这是当前从 javascript 调用的,javascript 数组被直接设置为通过 AJAX 调用发送到 php 的数据对象的一部分。
现在,我想从 Android 应用程序发送一个数组,我不想更改现有的 php 和 javascript。我一直在寻找答案,但没有看到任何东西,除了建议将数组编码为 JSON 并在 php 中对其进行解码,但这将需要在任何地方进行大量更改,包括 javascript。看来 javascript 和 php 可以正常工作。也许某些事情会自动对阵列完成?
PHP 看起来像这样:
foreach($_POST as $key => $value) {
if (is_array($_POST[$key])){
for ($index = 0; $index < count($_POST[$key]); $index++){
if(ini_get('magic_quotes_gpc'))
$_POST[$key][$index] = stripslashes($_POST[$key][$index]);
$_POST[$key][$index] = htmlspecialchars(strip_tags($_POST[$key][$index]));
}
}
else {
if(ini_get('magic_quotes_gpc'))
$_POST[$key] = stripslashes($_POST[$key]);
$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}
}
所以,它肯定期望一些参数是数组。
javascript 目前是这样做的:
$.ajax({
type: "POST",
url: 'php/getLibraryPatterns.php',
dataType: 'json',
data: data,
data 是一个 javascript 对象,其中包含数组。例如:
var data = {};
if (sortBy.length > 0){
data.sortBy = sortBy;
}
sortBy 是 javascript 中的一个数组。
如何将数组从 Android 应用程序传递到此 php?目前,我对 php 的其他调用的所有参数都只是简单的字符串,因此我使用以下函数将所有参数放在一个字符串中,然后将其写入我的 HttpURLConnection 的 OutputStream。我已经完成了所有工作,只是不确定如何处理数组?
private String buildParameterString() throws UnsupportedEncodingException
{
if (m_parameterMap == null) return "";
StringBuilder result = new StringBuilder();
boolean first = true;
Iterator<Map.Entry<String, String>> itr = m_parameterMap.entrySet().iterator();
while(itr.hasNext())
{
Map.Entry<String, String> param = itr.next();
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(param.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(param.getValue(), "UTF-8"));
}
return result.toString();
}
我尝试用数据创建一个 JSONArray,然后转换为字符串并设置它,就像设置我发送的其他字符串一样。但是,这似乎不起作用,至少不会自动起作用。
所以,我在参数中发送类似“[29]”或“['sortAsc']”的字符串。
我得到了一个空列表。我将继续在 php 中调试以查看它们在那里的样子,但我希望它们只是字符串,而 php 不知道如何处理它。
那么,如何将数组发送到 php?我不想更改 php,因为这意味着 javascript 也必须更改。有什么办法可以从 java Android 应用程序做到这一点?
【问题讨论】: