将javascript对象数组传递给ajax

时间:2015-01-03 05:02:36

标签: php jquery ajax

这是我提交表单的实现代码。我想通过ajax在数据库中插入表数据值的位置。但它不是控制器。

$('#submit').click(function(){

 var TableData = new Array();
 $('#cart_details tr').each(function(row, tr){

 TableData[row]={
    "productname" : $(tr).find('td:eq(0)').text()
    , "quantity" :$(tr).find('td:eq(1)').text()
    , "unit" : $(tr).find('td:eq(2)').text()
    , "unit_rate" : $(tr).find('td:eq(3)').text()
  }

   });


TableData.shift();

//TableData = $.toJSON(TableData);
var TableData = JSON.stringify(TableData);

alert(TableData);
var followurl='<?php echo base_url()."index.php/purchase/save_product";?>';

$.ajax({
   type: "POST",                     
   url:followurl,                                                 
   data: TableData,
   datatype : "json",

   cache: false,
   success: function (data) {
     alert("dsad"+data);
   }
   });

  });

当我stringify tabledata数组输出就像这样..

  [{"productname":"Copper Sulphate","quantity":"1","unit":"1","unit_rate":"100"},
  {"productname":"Hypta Hydrate","quantity":"1","unit":"1","unit_rate":"100"}]

我的问题是它为什么不去控制器?这是因为数组对象还是其他什么?

Tabledata是javascript对象数组。我是对的吗?

3 个答案:

答案 0 :(得分:0)

使用

$.ajax({

而不是

$.post({

使用此代码

$.ajax({
   type: "POST",                     
   url:followurl,                                                 
   data: {TableData : TableData},
   cache: false,
   success: function (data) {
     alert("dsad"+data);
   }
   });

查看文档jquery.post

$.post的语法是

$(selector).post(URL,data,function(data,status,xhr),dataType)

您不必定义类型

但是你在$.ajax混合$.post

这是$.ajax函数语法

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

然后将$.post更改为$.ajax并尝试

答案 1 :(得分:0)

正如您可以在documentation中阅读的那样,您可以将对象传递给data。我认为如果你采用这种方法,你会让事情变得更容易和简单。

...
//TableData = $.toJSON(TableData); NO!!!
//var TableData = JSON.stringify(TableData); NO!!!

//alert(TableData);
var followurl='<?php echo base_url()."index.php/purchase/save_product";?>';

$.ajax({
   type: "POST",                     
   url:followurl,                                                 
   data: { 
    dataTable: TableData
   },
   datatype : "json",
   cache: false,
   success: function (data) {
     alert(data);
   }
   });

});

index.php/purchase/save_product

的非常简单的例子(没有验证或类似的任何事情)
$data = $_POST["dataTable"];
echo $data[0]["productname"];// Sending back the productName of the first element received.
die();

如您所见,如果您遵循此方法,则可以非常轻松地访问index.php/purchase/save_product文件中的数据。

希望它有所帮助。

答案 2 :(得分:0)

嗨看起来您正在使用某些CMS或Framework。您能否告诉我们您正在使用的框架或CMS。然后我就能解决这个问题。看起来您正在使用Code Ignitor。如果它如此,那么我希望这会帮助你

$.post( "<?php echo base_url();?>index.php/purchase/save_product", function(data) {
  alert( "success" );
}, 'html') // here specify the datatype
.fail(function() {
  alert( "error" );
})

在您的情况下,您的ajax调用必须看起来像

var followurl="<?php echo base_url();?>index.php/purchase/save_product";

$.ajax({
   type: "POST",                     
   url:followurl,                                                 
   data: TableData,
   datatype : "json",

   cache: false,
   success: function (data) {
     alert("dsad"+data);
   }
   });

  });
  

错误似乎在您的 followUrl 中,请尝试在我的代码中使用