我创建了一个代码,它接受一个对象并将其从一个网页(javascript)发送到另一个网页。 我使用Ajax和POST方法发送对象,我目前在第二页上使用POST来获取PHP中的数据并将其发送回数据库。 目前它在我尝试发送一个对象时有效,但我正试图找到一种方法一次发送多个对象。
我正在尝试使用for循环,我遍历包含对象的数组并尝试一次发送一个。 目前只有数组中的第一个项目进入数据库,我不确定原因。
以下是使用Ajax发送的代码:
for (i = 0; i < objSend.length; i++) {
//objSend is the array containing the objects
console.log("i",i);
console.log(objSend[i]);
$.ajax({
async: false,
type: "POST",
url : "map_process_test.php",
data: objSend[i],
success : function(data){
console.log("Sent/Done");
},
error: function(xhr,ajaxOptions,thrownError){
alert(thrownError);
}
});
}
控制台每次都返回“已发送/完成”,但数据库中未找到任何其他内容。 以下是接收数据的第二页的代码
$lat = $_POST["pin_lat"];
$lng = $_POST["pin_lng"];
$pin_id = $_POST["pin_id"];
$pin_number = $_POST["pin_number"];
$pin_text = $_POST["pin_text"];
$pin_title = $_POST["pin_title"];
$project_id = $_POST["project_id"];
$results = mysql_query("INSERT INTO tbl_project_coords(pin_id, pin_number, pin_lat, project_id, pin_lng, pin_title, pin_text) VALUES ('$pin_id','$pin_number','$lat','$project_id','$lng','$pin_title','$pin_text')");
echo("DONE 2 ");
我尝试过将Async设置为true和false,但两者都没有区别。 谢谢你的帮助
答案 0 :(得分:1)
尝试发送这样的对象:
$.ajax({
async: false,
type: "POST",
url : "map_process_test.php",
data: { data_from_javascript: JSON.stringify(objSend)},
success : function(data){
console.log("Sent/Done");
},
error: function(xhr,ajaxOptions,thrownError){
alert(thrownError);
}
});
然后服务器端使用php尝试:
$data = json_decode($_POST['data_from_javascript']);
foreach($data as $entry)
{
$lat = $entry["pin_lat"];
$lng = $entry["pin_lng"];
$pin_id = $entry["pin_id"];
$pin_number = $entry["pin_number"];
$pin_text = $entry["pin_text"];
$pin_title = $entry["pin_title"];
$project_id = $entry["project_id"];
$results = mysql_query("INSERT INTO tbl_project_coords(pin_id, pin_number, pin_lat, project_id, pin_lng, pin_title, pin_text) VALUES ('$pin_id','$pin_number','$lat','$project_id','$lng','$pin_title','$pin_text')");
echo("DONE 2 ");
答案 1 :(得分:1)
您必须调整后端代码以正确循环结果,但我认为您可以一次性发送整个对象:
data: { 'everything': objSend },
这样就可以获得一个可以循环的多维$_POST['everything']
数组,类似于为表单元素命名name="my_name[key1][key2]"
时。
您当然也可以将整个包作为字符串发送并在服务器上解析它:
data: { 'json': JSON.stringify(objSend) },
然后你可以使用像json_decode($_POST['json'])
这样的东西来恢复原始结构。