2

我正在尝试通过 json 将图像坐标传递给应该更新数据库的 php 文件。我在jquery中有这个:

var coords=[];  
var coord = $(this).position();  
var item = { coordTop:  coord.top, coordLeft: coord.left  };  
coords.push(item);  
var order = { coords: coords };  
$.ajax({   
    type: "POST",
    data : +$.toJSON(order), 
    url: "updatecoords.php",   
    success: function(response){
        $("#respond").html('<div class="success">X and Y Coordinates 
            Saved</div>').hide().fadeIn(1000);  
        setTimeout(function(){ 
            $('#respond').fadeOut(1000); 
        }, 2000);  
    }
});

这是 updatecoords.php 的样子:

<?php

$db = Loader::db(); 

$data = json_decode($_POST['data']); 
foreach($data->coords as $item) {  

    $coord_X = preg_replace('/[^\d\s]/', '', $item->coordTop);  
    $coord_Y = preg_replace('/[^\d\s]/', '', $item->coordLeft);  

    $x_coord = mysql_real_escape_string($coord_X); 
    $y_coord = mysql_real_escape_string($coord_Y);

    $db->Execute("UPDATE coords SET x_pos = '$x_coord', y_pos = '$y_coord'");
}  

?>  

成功消息从 javascript 显示,但是数据库中没有更新?有什么想法吗?

4

4 回答 4

0

您在 $.toJSON 之前有一个 +。这意味着它返回的 json 字符串将被转换为整数 - 可能是 0 或 NaN。

于 2012-12-03T08:24:17.373 回答
0

Alex 是对的,但您也可以从 preg_replace 模式中取出引号。PHP 自然地使用 /.../ 斜线来“引用”正则表达式。

于 2012-12-03T08:28:52.047 回答
0

感谢您的帮助,但这似乎可以解决问题....

在 JavaScript 中:

$.post('updatecoords.php', 'data='+$.toJSON(order), function(response){ alert (response + mydata);

在 Updatecoords.php 中:

$data = json_decode(stripcslashes($_POST['data']));  
于 2012-12-07T22:02:58.977 回答
0

尝试这个

  UPDATE coords SET x_pos = '".$x_coord."', y_pos = '".$y_coord."'

并在这里查看如何使用toJSON

编辑 :

尝试这个

 $.ajax({   
type: "POST",
data : { coordTop:  coord.top, coordLeft: coord.left ,coords: coords }, 

在第二个代码中这样做

   $data = json_decode($_POST['data']); 
   $coordTop = mysql_real_escape_string($_POST['coordTop']);
   $coordLeft = mysql_real_escape_string($_POST['coordLeft']);
   $coords = mysql_real_escape_string($_POST['coords']);
  foreach(.........
  .....
  .....

然后使用这些变量 $coordTop , $coordLeft , $coords

于 2012-12-03T08:33:18.813 回答