【问题标题】:How to send emojis with text using jQuery Ajax?如何使用 jQuery Ajax 发送带有文本的表情符号?
【发布时间】:2020-11-16 22:51:30
【问题描述】:

我要求用户可以同时输入 Emjois 和文本。我想将此带有表情符号的文本传递到服务器(通过 Ajax 后调用)并保存在数据库(sql 服务器)中。我们也在为原生移动(安卓、iOS)应用程序使用相同的应用程序,因此它也应该处理原生应用程序表情符号。

请您帮忙并提出您的建议吗?

User entered as: **Hello this is sample text ? ! @ # $ ????✌????‍????**

当前代码:

var memo = $('#txtMemo').val();
var recipientFName = $('#recipientFirstName').val();

$.ajax({
        type: "POST",
        url: "/Mobile//Send",
        dataType: "json",
        data: {
            'recipientFirstName': recipientFName,
            'memo': memo ,
        },
        success: function (response) {
        },
        error: function () {
        }
    });

【问题讨论】:

  • 如果您以 utf-8 编码存储文本,我看不出表情符号有什么问题。
  • 能否提供示例代码。以上是我当前通过 Ajax 调用发送的代码。
  • 一定要在表情符号列表上使用类似 split(",") 的东西,这样 js 就不会撕开你的表情符号。示例:var emojis = "????,????,????,????,????".split(",");

标签: javascript jquery ajax asp.net-mvc asp.net-ajax


【解决方案1】:

有趣的问题。我在下面创建了一些与 jQuery 文档 (dom) 相关的测试...

  • .on('click', '[name="html"]' 获取此按钮 dom html
  • .on('click', '[name="data"]'获取此按钮[data-emojis]
  • .on('click', '[name="variable"]'使用js let result变量值
  • .on('click', '[name="json"]' 运行 jQuery json ajax 并获得响应
  • .on('submit', 'FORM'获取输入[name="emojis"]

上面的测试也返回结果/响应 $result div 作为 html,以及 console.log() 结果。

我似乎在这些测试中找不到问题。请参阅下面的测试代码...

// constant result div for button on click results
const $result = $('#result');

// button name html on click function
$(document).on('click', '[name="html"]', function() {

  // get emojis html from button child span
  let result = $(this).find('SPAN').html();

  // log result
  console.clear();
  console.log(result);

  // render result html
  $result.html(result);

});

// button name data on click function
$(document).on('click', '[name="data"]', function() {

  // get emojis from button data attribute emojis
  let result = $(this).data('emojis');

  // log result
  console.clear();
  console.log(result);

  // render result html
  $result.html(result);

});

// button name variable on click function
$(document).on('click', '[name="variable"]', function() {

  // js variable with emojis
  let result = '??✌';

  // log result
  console.clear();
  console.log(result);

  // render result html
  $result.html(result);

});

// button name json on click function
$(document).on('click', '[name="json"]', function() {

  // jquery ajax call
  $.ajax({

    // get json file with emojis 
    url: 'https://api.jsonbin.io/b/5fb3211d5be6ec73e94f6285',
    type: 'GET',
    dataType: 'json',

    // on success response function
    success: function(response) {

      // json response with emojis
      let result = response[0].emojis;

      // log result
      console.clear();
      console.log(result);

      // render result html
      $result.html(result);


    },

    // on fail response function
    error: function() {

      // console err
      console.log("json emoji error");

    },


  });


});

// form test on submit function
$(document).on('submit', 'FORM', function(e) {

  // prevent form submit default
  e.preventDefault();

  // this form input with name emojis
  let result = $('[name="emojis"]',this).val();

  // log result
  console.clear();
  console.log(result);

  // render result html
  $result.html(result);

});
BUTTON {
  display: block;
  text-align: center;
  width: 100%;
  margin-bottom: 20px;
}

FORM {
  display: block;
  overflow: hidden;
}

INPUT {
  display: block;
  text-align: center;
  margin-bottom: 10px;
  width: 100%;
  min-height: 28px;
}

#result {
  padding: 1rem;
  border: 1px solid black;
  text-align: center;
  font-size: 4rem;
  border-radius: 3px;
  position: fixed;
  width: calc(50% - 30px);
}

.row {
  margin-left: -10px;
  margin-right: -10px;
}

.col {
  width: 50%;
  padding-left: 10px;
  padding-right: 10px;
  float: left;
}

BODY {
  margin: 0;
  padding: 20px;
  height: 1000px;
}

*, ::after, ::before {
    box-sizing: border-box;
}
<div class="row">
  <div class="col">

    <button name="html">
      Click for html result <span>?✌?</span> 
    </button>

    <button name="data" data-emojis="✌??">
      Click for data-emoji result ✌??
    </button>
    
    <button name="variable">
      Click js var value result ??✌
    </button>

    <button name="json">
      Click json ajax response ✌?➕❤️
    </button>
    
    <form>
      <input type="text" name="emojis" value="???" />
      <button>
        Submit emojis form above ???
      </button>
    </form>  

  </div>
  <div class="col">
  
    <div id="result"></div>
    
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

这是我在最后一次点击测试中使用的带有表情符号的远程 json 文件。https://api.jsonbin.io/b/5fb3211d5be6ec73e94f6285

我使用的是 Mac,所以不确定这些结果如何在其他操作系统浏览器上返回。上面这些 jQuery 浏览器测试在 chrome 中为我返回 OK ??

这也是上述测试的一个小插曲...https://jsfiddle.net/joshmoto/dLao23yq/

【讨论】:

  • 感谢 joshmoto 的帮助。您的回答很有帮助,但主要挑战是,需要通过 Ajax 调用传递表情符号,我看到您一次提交整个表单。您能否建议我们是否可以通过 Jquery Ajax 传递表情符号?此外,我在任何地方都找不到任何合适的解决方案。如果您能对此提供帮助,那将非常有帮助...❤️❤️
  • 不用担心。但从技术上讲,我并没有提交整个表单,这是一个示例 jquery .on('submit') 函数,它在提交时使用.val() 获取此表单子输入name="emojis",就像您的代码一样,并使用.html() 将其返回给@ 987654340@ 分区。您能否添加更多关于如何获取值的上下文 (html)?您指定了dataType: "json"url "/Mobile//Send",但是您传递的数据是如何在幕后处理的?
  • 在您的 ajax success 上,控制台记录了 response 数据变量是什么?发布回复会很方便。
  • 当然,我们当前的实现是将纯文本和几个特殊符号发送到 DB。为此,我们使用 JQuery Ajax 通过 JSON 格式发送所有信息。现在的新要求是允许表情符号以及文本和一些特殊字符。应从桌面/Andriod 键盘/iOS 键盘表情符号支持表情符号。我们需要将此内容保存在 SQL Server 数据库中,并需要将带有文本信息内容的相同表情符号发送给用户,以便他们可以看到带有表情符号的相同内容。
猜你喜欢
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2015-10-04
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多