使用javascript和ajax将多个对象发送到php

时间:2015-05-26 16:03:13

标签: javascript php jquery ajax

我创建了一个代码,它接受一个对象并将其从一个网页(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,但两者都没有区别。 谢谢你的帮助

2 个答案:

答案 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'])这样的东西来恢复原始结构。