Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX将数组数据作为JSON对象发送_Javascript_Php_Json_Ajax - Fatal编程技术网

Javascript AJAX将数组数据作为JSON对象发送

Javascript AJAX将数组数据作为JSON对象发送,javascript,php,json,ajax,Javascript,Php,Json,Ajax,我有一个表单,我想要表单的特定元素,我得到了这些元素并将它们存储在数组中 var that = $(this), url = that.attr('action'), type = that.attr('method'), data = {}; var item_name = miniform.elements['itemId'].value; var quantity = miniform.elements['quantityId'].value; var amount = minifor

我有一个表单,我想要表单的特定元素,我得到了这些元素并将它们存储在数组中

var that = $(this),
url = that.attr('action'),
type = that.attr('method'),

data = {};

var item_name = miniform.elements['itemId'].value;
var quantity = miniform.elements['quantityId'].value;
var amount = miniform.elements['amountId'].value;
var total = amount * quantity;
var cart = ["Item: ",item_name,"Quantity: ",quantity,"Amount: ",amount,"Total: ",total];
然后我想将这个数组转换成一个JSON对象,并通过ajax将其发送到一个php文件,但它不起作用。以下是我的ajax代码:

$.ajax({
    url: url,
    type: type,
    Content-Type:'application/JSON',
    data: JSON.stringify(cart),
    success: function(){
        console.log('Message Sent');
     }
    });

有什么问题吗?

您可以使用
formdata()
发送整个表单。你为什么不这么做

无论如何,它不起作用,因为您不是在创建json对象,而是在创建普通数组。这是不同的。实际上,您可以将json直接放入ajax调用中,而不必对其进行字符串化

var cart = {};
cart['Item'] = item_name;
cart['Quantity'] = quantity;
cart['Amount'] = amount;
cart['Total'] = total;

$.ajax({
  url: 'https://www.google.com',
  type: "POST",
  //Datatype causes it to automatically become json and will expect json back
  //return json back from php through json_encode($myArray);       
  dataType: "json",
  data: cart,
  success: function() {
    alert('Message Sent');
  }
});
简而言之:您使用了错误的大括号:)

我只是把它改成了一种更简单的管理对象的方法。上一个对象的问题是它构建错误。应该是这样的:

var cart = {"Item":item_name,"Quantity": quantity,"Amount":amount,"Total":total};
你做错了

请这边走

var cart = {"Item ":item_name,"Quantity ":quantity,"Amount ":amount,"Total ":total};

$.ajax({
url: url,
type: type,
Content-Type:'application/JSON',
data: JSON.parse(cart),
success: function(){
    console.log('Message Sent');
 }
});
如果要发布阵列,则可以使用这种方式

cart = [];
cart[0] = item_name;
cart[1] = quantity;
cart[2] = amount;
cart[3] = total;

$.ajax({
url: url,
type: type,
Content-Type:'application/JSON',
data:{cart:cart},
success: function(){
    console.log('Message Sent');
 }
});

看逗号,它应该是
{“key”:value,“key”:value..}
而不是
{“key”:,value,“key”:,value..}

var cart = {"Item" : item_name, "Quantity" : quantity, "Amount" : amount, "Total" : total};
不要手动构建它 不要手动构建容易出错的对象或数组,而是按如下方式进行:

对象 排列 或者,如果您希望使用阵列:

// Define your empty array
var cart = [];

// Assign its properties
cart['item_name'] = miniform.elements['itemId'].value;
cart['quantity'] = miniform.elements['quantityId'].value;
cart['amount'] = miniform.elements['amountId'].value;
cart['total'] = amount * quantity;
现在您已经准备好了
购物车
对象或数组,可以调用
JSON.stringify

JSON.stringify(cart);

我找到了解决问题的方法,并结合了您的一些回答来找到答案

$('#miniform').on('submit',function(){  
    var that = $(this),
    url = that.attr('action'),
    type = that.attr('method'),

    data = {};
    var cart = {};

    cart.item_name = miniform.elements['itemId'].value;
    cart.quantity = miniform.elements['quantityId'].value;
    cart.amount = miniform.elements['amountId'].value;
    cart.total = cart.amount * cart.quantity;

    var jsonString = JSON.stringify(cart);

   $.ajax({
    url: url,
    type: type,
    data:{data:jsonString},
    success: function(){
        console.log('Email Sent');
     },
     error: function(error){
     throw new Error('Did not work');
      }
    });
 return false;
 });

你真的要写
内容类型:'application/JSON',
,因为这是一个语法错误,会在控制台中报告。@t.niese应该是什么呢?@t.niese是这个上下文中必需的数据类型,因为我没有包括它。写
上下文文本:'application/JSON'
会导致脚本无法运行<代码>上下文文本作为键无效,您需要引用它。我看到您的观点@t.niese我删除了上下文文本,代码正常工作,但是消息没有显示在控制台中JavaScript对象不是JSON。在javascript中,JSON是包含数据的字符串。您分配给
cart
的内容将导致语法错误working@lorrainemutheu您是否也注意了我更改的ajax调用的其余部分?您是否介意引用?@Jonasw如果它是实际对象,则不会。对于字符串,可以使用引号。“对于一个物体,你不会。”Babyded,我可能知道。试试你自己的代码,你会发现它抛出了一个错误,可能是非法的左侧表达式。这就是为什么你需要使用quotesoh!!很抱歉,这是键入错误,我会更正它。@vjytiwari我使用了您的第一种方法,但是数据仍然没有被发送……或者可能是代码的第一部分有问题,使用$(这个)请您为上面的代码添加ajax代码,因为我被卡住了
$('#miniform').on('submit',function(){  
    var that = $(this),
    url = that.attr('action'),
    type = that.attr('method'),

    data = {};
    var cart = {};

    cart.item_name = miniform.elements['itemId'].value;
    cart.quantity = miniform.elements['quantityId'].value;
    cart.amount = miniform.elements['amountId'].value;
    cart.total = cart.amount * cart.quantity;

    var jsonString = JSON.stringify(cart);

   $.ajax({
    url: url,
    type: type,
    data:{data:jsonString},
    success: function(){
        console.log('Email Sent');
     },
     error: function(error){
     throw new Error('Did not work');
      }
    });
 return false;
 });