草庐IT

php - 寻找有关实现 AJAX 项目的语法指导

coder 2024-04-15 原文

我正在进行我的第一个 AJAX 项目,并且在概念上已经规划了大部分内容,但由于我缺乏语法知识而被搁置了。我想我的结构/功能逻辑也可能略有偏差。

我正在寻找一些指导,尽管是对教程的引用或对我遗漏或忽略的内容的任何更正。

profile.php:这是具有可供点击的实际缩略图图标和 $.post 功能的页面:

这是拇指结构。

当点击拇指时,我需要发送评论的id?我知道我需要计算它以某种方式被点击并将其发送到 $.在此页面底部的帖子区域,我还需要在拇指计数器 div 中放置某种 php 变量,以便在 $.帖子确认它已被点击。

<div id="thumb_holder">
    <div id="thumb_report">
        <a href="mailto:info@cysticlife.org">
            report
        </a>
    </div>
    <div id="thumb_counter">
        +1
    </div>
    <div id="thumb_thumb">

        <?php $comment_id = $result['id'];?>
        <a class="myButtonLink" href="<?php echo $comment_id; ?>"></a>

    </div>
</div>

这是$.post函数

这应该发送评论的id?但最肯定的是应该发送一条拇指链接被点击的记录,并以某种方式将它发送到我与数据库对话的 php 页面。

<script>
$.ajax({
 type: 'POST',
 url:" http://www.cysticlife.org/thumbs.php,"
 data: <?php echo $comment_id; ?>,
 success: success
 dataType: dataType
});
</script>

thumbs.php:是在单击拇指时发送递增请求的页面,然后反过来告诉数据库存储一个 clikc,我在这个页面上还没有任何东西。但我假设它将通过来自其他页面的 $.post 函数传递点击记录,从语法上我不知道它是如何工作的,然后通过插入查询将拍摄它记录到数据库。

这是数据库中的表的内容

我有三行:一个自动递增的id。一个 comment_id,这样它就知道哪个评论被“点赞”了,最后一个 likes 来跟踪竖起大拇指的数量。

最佳答案

至少你已经有了一个好的开始,还有一些错误。首先,您可能需要习惯一些基本原则:

1) 如何创建点击事件

首先是按钮,我插入了“2”作为 href。

<a class="myButtonLink" href="2">Vote Up!</a>

编辑:万一 JS 被禁用,这将是一个更好的选择:

<a class="myButtonLink" href="voteup.php?id=2" id="2">Vote Up!</a>

然后是 JS:

$('.myButtonLink').click(function(e) {
  e.preventDefault();
  alert('the button has been clicked!');
});

e 表示事件,所以我们在提交后做的第一件事就是取消默认操作(重定向到'2')。然后我们提醒该按钮已被单击。如果这可行,我们可以进入下一步。

2) 从点击的链接中获取 ID 值。

在点击函数中,我们可以使用$(this),它代表被点击的元素。 jQuery 为我们提供了一组函数来从给定元素获取属性,这正是我们所需要的。

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');
  alert('We are upvoting comment with ID ' + comment_id);
});

当一切顺利时,这应该提醒“我们正在使用 ID 2 对评论进行投票”。那么,继续下一步!

3) 发送请求

如果您刚刚开始使用 ajax/jquery,这可能是更难的一步。您必须知道的是,您发送的数据可以是 url 字符串(param=foo&bar=test)或 javascript 数组。在大多数情况下,您将使用 url 字符串,因为您正在请求一个文件。还要确保使用相关链接(“ajax/upVote.php”而不是“http://www.mysite.com/ajax/upVote.php”)。所以这里有一些测试代码:

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');

  $.ajax({
    type: 'POST',
    url: 'thumbs.php',
    data: 'comment_id=' + comment_id,
    success: function(msg) { alert(msg); }
});

数据类型是自动检测的,例如,您可以在 JSON 响应(可以是具有状态和消息响应的数组)或纯文本之间进行选择。让我们保持简单,从纯文本开始。

此脚本所做的是调用 thumbs.php 并发送一个 $_POST 值 ($_POST['comment_id'] = 2) 以及此请求。在 thumbs.php 上,您现在可以执行 PHP 部分:

1) checking if the comment_id is valid
2) upvoting the comment
3) print the current amount of votes back to the screen (in thumbs.php)

如果您将票数打印回屏幕,我给您的最后一个脚本将提醒一个包含票数的消息框。

4) 使用 JSON 返回数据数组

为了在您的屏幕上获得正确的响应,您可以考虑发回一个数组,例如:

$arr = array(
  'result' => 'success', // or 'error'
  'msg' => 'Error messag' // or: the amount of votes
)

然后您可以使用 php 函数 json_encode($arr) 对其进行编码。然后您将能够通过使用此脚本获得更体面的响应:

$('.myButtonLink').click(function(e) {
  e.preventDefault();

  var comment_id = $(this).attr('id');

  $.ajax({
    type: 'POST',
    url: 'thumbs.php',
    data: 'comment_id=' + comment_id,
    success: function(data) {
      if(data.result == "error") {
        alert(data.msg);
      } else {
        alert('Your vote has been counted');
        $('#numvotes').html(data.msg);
      }
    }
});

如您所见,我们使用的是 (data) 而不是 (msg),因为我们要发回数据集。 PHP中的数组($arr['result'])可以读作data.result。首先,我们检查结果是什么(错误或成功),如果是错误,我们会提醒发送的消息(错误的数据库连接、错误的评论 ID、无法计算投票等)结果如果成功,我们会提醒投票已被统计并将(更新的)票数放入 ID 为“numvotes”的 div/span/other 元素中。

希望这对您有所帮助 ;-)

//编辑:我注意到代码标签有一些错误。修复了“手册”的第一部分。

关于php - 寻找有关实现 AJAX 项目的语法指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981859/

有关php - 寻找有关实现 AJAX 项目的语法指导的更多相关文章

  1. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  5. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  6. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  7. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

  8. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  9. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  10. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

随机推荐