开发者问题收集

获取使用ajax生成的div中文本的长度

2016-12-05
408

我的 .php 文档包含大量字符串数组。我的页面从中取出一个字符串,并将其放入名为 post 的空 div 中。当我想获取帖子的长度时,它总是:

Uncaught TypeError: Cannot read property 'length' of undefined

因此,我假设我的 jQuery 代码读取 <div class="post"></div> ,它是空白的,直到网站加载并在其中生成文本。那么,如何从我的 post.php 文档中获取生成的字符串的长度?

<html>
  <head>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script>
      function getPost()
      {
        $.ajax({
          type: 'POST',
          url: 'posts.php',
          dataType: 'html',
          cache: false,
          success: function(result) {
            $('.post').html(result);
          },
        });
      }
      getPost();
    </script>
  </head>
  <script>
    var postPoints = $(".post").val().length;
  </script>
  <body>
    <div class="post"></div>
  </body>
</html>

posts.php

<?php
    $posts = array(
      "string1",
      "string2",
      "string3",
      "string4"
    );

    $maxPosts = sizeof($posts);
    $generatePost = rand(0,$maxPosts);
    if($lastPost != $generatePost)
    {
      echo $posts[$generatePost];
      $lastPost = $generatePost;
    }
    else
    {
      $generatePost = rand(0,$maxPosts);
      echo $posts[$generatePost];
      $lastPost = $generatePost;
    }
?>
2个回答

首先,脚本 var postPoints = $(".post").val().length; 根本找不到帖子 div,这就是为什么您会收到 undefined 错误消息:

Uncaught TypeError: Cannot read property 'length' of undefined

这是因为您试图在页面完全加载之前获取 div(可以使用 ready 函数修复):

$(function(){
    var postPoints = $(".post").val().length;
})

这样,脚本将找到您的 div 但它将始终返回“0”

因此,您应该在获得 ajax 请求的响应后获得 length ,您必须将您的行放在成功回调中:

success: function(result) {
    $('.post').html(result);
    alert( $(".post").val().length );
},

希望这对您有所帮助。

Zakaria Acharki
2016-12-05
function getPost()
{
$.ajax({
        type: 'POST',
        url: 'posts.php',
        dataType: 'html',
        cache: false,
        success: function(result) {
            $('.post').html(result);
            var length = result.length; //for further uses, you may also assign this value with global variable.
        },
    });
}
2016-12-05