【问题标题】:How to send my json array to sevaral rows in my sql database如何将我的 json 数组发送到 mysql 数据库中的几行
【发布时间】:2013-11-22 10:53:57
【问题描述】:

我有几个称为工人的元素,它们都有一个 id、左侧位置和顶部位置。 我已经把它变成了一个数组,然后把它变成了一个 json 对象,它想发送到我的数据库。但是当我在控制器和模型中测试它时,它说该值为空。 该怎么办?

第一个函数:

function GetUnitInfo(){

          for(i=0 ; i < $('.Worker').length ; i++){
          $('.Worker').each(function(){

                aUnitsInfo = [{'unitid':$(this).attr("id"),
                              'unitposleft':$(this).position().left,
                              'unitpostop':$(this).position().top
                            }];

                 jUnitsInfo.push(aUnitsInfo[i]);
                 aUnitsInfo = JSON.stringify(jUnitsInfo);    

               console.log(i);

          });
          console.log("unitinfo: "+jUnitsInfo[i].unitid);
         console.log("uniposleft: "+jUnitsInfo[i].unitposleft);
         console.log("unitpostop: "+jUnitsInfo[i].unitpostop);
         console.dir(jUnitsInfo[i]);
        }

          }

在我的日志中,我看到 3 个具有正确值的对象。

然后我想将它发送到数据库:

setInterval(function(){    
                SaveUnits();
                function SaveUnits()
                {   

                   GetUnitInfo();


                    $sLoginEmail = $('#TxtLoginEmail').val();
                    // TODO: Check that the email is valid
                    // console.log("The email is:"+$sLoginEmail); 
                    $.ajax({
                        type: 'post',
                        url: 'bridge.php',
                        data: {"sFunction":"SaveUnits", "unitsInfo":jUnitsInfo[i]},
                        success: function(data){
                            console.log(data);
                            $oXml = $(data);

                        }
                    });
                }
        },5000);

这就是它变得棘手的地方。我从第一个函数中知道我的 jUnitsInfo[i] 包含正确的对象,但在这部分之后它似乎为空。

这是我的桥梁:

     if($_POST['sFunction'] == "SaveUnits")
{
    require_once 'Controllers/UserController.php';
    $oUnitsInfo = new USerController();
    echo $oUnitsInfo->SaveUnits($_POST['unitsInfo']); 
}

控制器:

    public function SaveUnits($unitsInfo)
{require_once 'Models/UserModel.php';
    $oUserModel = new UserModel();
    $unitsInfo = json_decode($unitsInfo);
    $saveUnits = $oUserModel->SaveUnits($unitsInfo);}

和模型:

    public function SaveUnits($unitsInfo){        
    // Create connection
    $con = mysqli_connect("localhost","root","","awesomegame");
    // Check connection
     if (mysqli_connect_errno($con))
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }


    $unitsInfo = array(); 
    foreach( $unitsInfo as $row ) {
    $sql[] = '("'.mysql_real_escape_string($row['unitId']).'", '.$row['unitPosTop'].','.$row['unitPosLeft'].')';
    }
    mysql_query('INSERT INTO units (unitid, unitpostop, unitposleft) VALUES '.implode(',', $sql));}}

当我将它转储到控制器中时 var_dump(json_decode($unitsInfo)); 它只是返回一个空值。

如何正确发送数组? - 并在不同的行(每个工人一个)上获取写入数据库的值。

【问题讨论】:

    标签: php jquery sql ajax json


    【解决方案1】:

    好像

     jUnitsInfo[i]
    

    是合理的,因为您不在 for 循环中。

    拿码

    function GetUnitInfoAndSave(){
            var jUnitsInfo=[];
          $('.Worker').each(function(){
    
                var aUnitsInfo ={'unitid':$(this).attr("id"),
                              'unitposleft':$(this).position().left,
                              'unitpostop':$(this).position().top
                            };
    
                 jUnitsInfo.push(aUnitsInfo); 
          });
    
          for(var i=0 ; i < jUnitsInfo.length ; i++){
    
           var $sLoginEmail = $('#TxtLoginEmail').val();
                    // TODO: Check that the email is valid
                    // console.log("The email is:"+$sLoginEmail); 
            var data=$.extend({},{sFunction:"SaveUnits"},jUnitsInfo[i]);
                    $.ajax({
                        type: 'post',
                        url: 'bridge.php',
                        data: data,
                        success: function(data){
                            console.log(data);
                            $oXml = $(data);
    
                        }
                    });
    
          //console.log("unitinfo: "+jUnitsInfo[i].unitid);
         //console.log("uniposleft: "+jUnitsInfo[i].unitposleft);
         //console.log("unitpostop: "+jUnitsInfo[i].unitpostop);
         //console.dir(jUnitsInfo[i]);
        }
    }
    setInterval(GetUnitInfoAndSave,5000);
    

    PS:$.Ajax 和 setInterval 函数是异步的,所以你不知道数据何时真正发送到服务器。 (此代码一个接一个地发送数组项)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2021-09-20
      • 2014-05-24
      相关资源
      最近更新 更多