格式错误的JSON字符串从AngularJS传递JSON时出错

malformed JSON string Error while passing JSON from AngularJS

本文关键字:JSON 传递 出错 AngularJS 字符串 错误 格式      更新时间:2023-09-26

我正在尝试在ajax请求中传递JSON字符串。这是我的密码。

    NewOrder =  JSON.stringify (NewOrder);
    alert (NewOrder);
    var req = {
        url: '/cgi-bin/PlaceOrder.pl',
        method: 'POST',
        headers: { 'Content-Type': 'application/json'},
        data: "mydata="+ NewOrder
    };  
    $http(req)
    .success(function (data, status, headers, config) {
        alert ('success');
    })
    .error(function (data, status, headers, config) {
        alert (status);
        alert (data);
        alert ('Error')
    });

警报(NewOrder)给出-

{"ItemList":[{"ItemName":"Quality Plus Pure Besan 500 GM","Quantity":1,"MRP":"28.00","SellPrice":"25.00"}],"CustomerID":1,"DeliverySlot":2,"PaymentMode":1}

这似乎是一个有效的JSON字符串。

但在脚本方面,我得到了以下错误。在这条线上

my $decdata = decode_json($cgi->param('mydata'));

格式错误的JSON字符串,不是数组、对象、数字、字符串或原子,字符偏移量为0(在"(字符串末尾)"之前)

能请某人帮我为什么会出现这个错误吗?

$cgi->param('myData')返回查询参数字符串"mydata",在您的情况下不会发送该字符串。

您将json数据发布在http post负载的请求主体中,而不是作为查询/表单参数。在这种情况下,您需要一些其他函数来读取服务器端脚本中请求主体的内容。

恰好是: my $data = $query->param('POSTDATA');

如本文所述:http://search.cpan.org/~lds/CGI.pm-3.43/CGI.pm#HANDLING_NONURLENCODED_ARGUMENTS

此外,您应该在发布的正文中从json中删除"mydata=",因为http请求负载正文没有参数名称(它们仅用于查询/表单参数)。

你的最终代码应该是这样的:

var req = {
    url: '/cgi-bin/PlaceOrder.pl',
    method: 'POST',
    headers: { 'Content-Type': 'application/json'},
    data: NewOrder
}; 

服务器端:

my $decdata = decode_json($query->param('POSTDATA'));

我认为这可能与这个问题有关:AngularJs$http.post()不发送数据

通常我会发布这样的数据:

var req = {
    url: '/cgi-bin/PlaceOrder.pl',
    method: 'POST',
    headers: { 'Content-Type': 'application/json'},
    data: {"mydata" : NewOrder}
};  

然而,我假设您期望数据作为来自以下的请求参数:

my $decdata = decode_json($cgi->param('mydata'));

如果是这样的话,那么相关的SO问题就是你想要的。

Angular$http.post接受两个参数作为url和有效载荷
   var url = '/cgi-bin/PlaceOrder.pl';
   var payLoad = {'myData' :JSON.stringify(NewOrder)}; 
    $http.post(url, payLoad)
    .success(function(data) {
    console.log(success);
    })

在服务器端,从请求参数中获取所需的json字符串,然后按如下方式取消json的解析:

    $result = $cgi->param('myData');
    my $decdata = decode_json($result);