javascript - 将对象从 javascript 传递到 Perl dancer 框架

标签 javascript ajax object hash dancer

我有以下ajax代码将值传递给dancer框架

 BookSave: function(data) {
  ### data is an object that contain more than one key value pair
         var book = Book.code;
         $.ajax ({
              type: "GET",
              url : 'textbook/save/' + book + '/' + data,
              success: function(data) {
                  if(data.status == 1) {
                         alert("success");
                  } else {
                        alert("fail");
                  }
             },
          });
    },

在舞者中:

any [ 'ajax', 'get' ] => '/save/:book/:data' => sub {
    set serializer => 'JSON';
    my $book = params->{book};
    my $data = params->{data};  ## This I am getting as object object instead of hash
};

有什么方法可以从js传递对象并在dancer中获取哈希值吗?

最佳答案

首先,考虑使用 http PUT 或 POST 动词,而不是 GET。这样做不仅在语义上更正确,它还允许您在 http 主体中包含更复杂的对象,例如您的“数据”哈希(根据我下面的评论进行序列化)。

我在 Dancer 的原生 AJAXy 方法方面取得了有限的成功,而且还有一个错误导致某些版本的 Firefox 出现问题。因此,我序列化然后反序列化 JSON 对象。

建议的更改(请注意,我还建议更改您的路线):

$.ajax ({
    type: "PUT",
    url : '/textbook/' + book,
    data: {
        myhash : JSON.stringify(data)
    },
    dataType: 'json',
    contentType: 'application/json',
    success: function (response) {
        if (response.status == 1) {
            alert("success")
        } else {
           alert("fail")
        }
    }
 })

并且您的 Perl Dancer 代码更改如下:

any [ 'ajax', 'put' ] => '/textbook/:book' => sub {
    set serializer => 'JSON';
    my $book = param('book');
    my $data = from_json(param('myhash'));
};

我没有测试这段代码,但它至少应该为您提供一个很好的起点来完成解决这个问题。

祝您的项目顺利!

关于javascript - 将对象从 javascript 传递到 Perl dancer 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31399389/

相关文章:

javascript - 使用 jQuery 的 Ajax 结果中的选择器问题

javascript - 更改 URL 时如何更新 AngularJS 指令?

php - 下载进度条

java - 如何将文本文件读入对象数组

javascript - 从嵌套的对象数组中提取所有特定属性

javascript - Sql 未在 UPDATE 上设置值

Javascript 和 svg,将具有功能的项目添加到页面

javascript - 将 React 应用程序转换为同构应用程序?

javascript - jQuery Ajax 通过函数获取值?

javascript - 这段代码有什么作用? "data.target == this"