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

时间:2015-06-28 11:33:06

标签: javascript json angularjs perl

我正在尝试在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')
    });

alert(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处(在“(字符串结尾)之前”)

有人可以帮助我,为什么我会收到此错误?

3 个答案:

答案 0 :(得分:3)

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

您在http post有效负载的请求正文中发布了json数据,而不是查询/表单参数。在这种情况下,您需要一些其他功能来读取服务器端脚本中请求正文的内容。

碰巧是: my $data = $query->param('POSTDATA');

如下所述:http://search.cpan.org/~lds/CGI.pm-3.43/CGI.pm#HANDLING_NON-URLENCODED_ARGUMENTS

你也应该删除" mydata ="来自您发布的正文中的json,因为http请求有效负载主体没有参数名称(它们仅用于查询/表单参数)。

您的结束代码应该是这样的:

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

和服务器端:

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

答案 1 :(得分:0)

我认为这可能与此问题有关:AngularJs $http.post() does not send data

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

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问题就是你要找的。

答案 2 :(得分:0)

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);