我正在使用AJAX将来自网页的输入发送到PHP文件,然后输入到数据库中。这是我的JavaScript文件:
var pageLoaded = function () {
var submitButton = document.getElementById("submit");
if (submitButton) {
submitButton.addEventListener("click", submit, true);
}
};
var submit = function () {
var xhr, changeListener;
var form = document.getElementById('item_form');
var inputs = form.getElementsByTagName('input');
// create a request object
xhr = new XMLHttpRequest();
// initialise a request, specifying the HTTP method
// to be used and the URL to be connected to.
xhr.open("POST", "../php/add_item.php", true);
console.log(inputs[0].value); // debugging
// Sends the inputs to the add_item.php file
xhr.send(inputs);
};
window.onload = pageLoaded;
这里我尝试将表单中的输入发送到我的文件系统中名为add_item.php
的名为"../php/add_item.php"
的PHP文件中。
我很确定这段代码可以工作,并将输入发送到数组中的PHP文件。
我的问题是,如何在该文件中使用$ _REQUEST才能使用数组中的输入发送到数据库?或者,这样做的最佳方式是什么?
答案 0 :(得分:2)
xhr.send()方法只接受一个字符串。如果要发送数组,则必须在发布之前将其展平为字符串。您可以使用javascript中的JSON.stringify()方法轻松完成此操作,然后在接收它时使用PHP中的json_decode()函数。
另外,PHP要在$ _POST []变量中正确接收数据(如果必须,则为$ _REQUEST,但不推荐),您需要设置POST变量的名称并对JSON文本进行URL编码,如下所示:
var json_array = JSON.stringify(inputs);
xhr.send('myJSONData=' + encodeURIComponent(json_array));
在PHP方面,您不需要使用urldecode(),因为服务器堆栈期望接收url编码的POSTed名称 - 值对。但是你需要在发布的变量上使用json_decode来恢复数组,例如:
php_array = json_decode($_POST["myJSONData"]);
您将看到其他方法,包括将xhr POST内容类型标头设置为JSON,但根据我的经验,这是阻力最小的路径。
另请注意,虽然可以以HTML形式发送对象的“数组”,如下所示:
<input type="text" name="myArray[]" value="val1">
<input type="text" name="myArray[]" value="val2">
<input type="text" name="myArray[]" value="val3">
<input type="text" name="myArray[]" value="val4">
答案 1 :(得分:0)
$_REQUEST
内的变量存储为数组。要访问它们,您可以执行与此类似的操作:
echo $_REQUEST['input_1'];
要查看JS发送的所有变量(格式不错),您可以使用以下代码:
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
答案 2 :(得分:0)
你不能以你的方式去做。您发送不正确的“输入”数组。您应该准备输入值数组。 Morover,我建议你使用JQuery。
$(function (){
$("#submit").click(function (){
//the way to get input values and names
var arr = [];
$("input").each(function (index,value){});
arr.push([$(value).attr('name'), $(value).val()];
});
// it can be replaced also via serialize() funciton
//ajax
$.post( "../php/add_item.php", arr)
.done(function( data ) {
//data has been send response is in data object
});
});
});
在PHP中,您可以通过$_POST
获取这些值。此处不需要$_REQUEST
因为您使用POST方法。例如,如果您有输入
<input name="xxx" value="test">
要在PHP中打印此输入的值,您需要使用此代码
echo $_POST['xxx'];
如果您不想使用JQuery,那么您仍然需要循环输入并准备正确的数组以通过XHR发送它。