ajax没有按下按钮

时间:2013-06-04 08:35:46

标签: php javascript jquery html ajax

我从早上起就一直在看这个,我无法弄清楚问题出在哪里..

这是javascript/ajax

$('#subscribe').live('click', function(){
        rel = $(this).attr("rel");
        datas = "topic_id="+rel;
        $.ajax({
            type: 'POST',
            url: 'subscribe.php',
            data: datas,
            success: function(result){
                alert("k");
                $(this).val(result);
            }
        });
    });

这是处理ajax的php已发布到“subscribe.php

<?php
session_start();
require_once(functions/functions.php);

if(isset($_POST["topic_id"])){
        $uid = user_id($_SESSION['username']);
        $tid = $_POST["topic_id"];
        $qry = "SELECT user_id FROM subscribe WHERE topic_id = $tid";
        $rst = mysql_query($qry);
        if(!$rst){
            $query = "INSERT INTO subscribe (user_id, topic_id) VALUES ($uid, $tid)";
            $qry = mysql_query($query);
            echo "Subscribed";
        }else{
            echo "hmmm";
        }
}?>

这是按钮

<input type="button" value="Subscribe" name="buton" id="subscribe" rel="'.$output["id"].'" />

警报似乎有效,但更改未生效且数据库中没有任何更改

6 个答案:

答案 0 :(得分:2)

您应该将对象用于请求数据:

datas = {topic_id:rel};

你需要在ajax回调成功中继续引用'this':

$('#subscribe').live('click', function(){
        var $self = $(this);
        rel = $self.attr("rel");
        datas = "topic_id="+rel;
        $.ajax({
            type: 'POST',
            url: 'subscribe.php',
            data: datas,
            success: function(result){
                alert("k");
                $self.val(result);
            }
        });
    });

您也可以使用闭包:

$('#subscribe').live('click', function () {
    rel = $(this).attr("rel");
    datas = "topic_id=" + rel;
    (function ($self) {
        $.ajax({
            type: 'POST',
            url: 'subscribe.php',
            data: datas,
            success: function (result) {
                alert("k");
                $self.val(result);
            }
        });
    })(this);
});

或查看$.proxy()方法。

顺便说一句,这里'rel'是一个全局变量,不确定它是你真正期望的。要使其成为本地,请使用'var'作为其声明。并且'live'被删除,你应该使用.on()代替。

答案 1 :(得分:0)

检查您的文件位置。 subscribe.php在哪里?以及javascript文件在哪里。 尝试使用firebug Firefox addon并转到控制台并检查ajax请求详细信息。 是否能找到subscribe.php

另外明智地在ajax请求中的'url'参数中给出相对路径

其他原因可能是require_once(“functions.php”)失败; 所以试着写死(“hii”);在subscribe.php中的那一行上方

答案 2 :(得分:0)

代替现场功能,你就像下面那样。它工作正常。

$('#subscribe').on('click', function(){
    rel = $(this).attr("rel");
    datas = "topic_id="+rel;
    $.ajax({
        type: 'POST',
        url: 'subscribe.php',
        data: datas,
        success: function(result){
            alert("k");
            $(this).val(result);
        }
    });
});

答案 3 :(得分:0)

试试这个

$('#subscribe').live('click', function(){
        var t = $(this);
        var rel = t.attr("rel");
        datas = {'topic_id' : rel};
        $.ajax({
            type: 'POST',
            url: 'subscribe.php',
            data: datas,
            dataType : 'json',
            success: function(result){
               t.val(result);
            }
        });
    });

答案 4 :(得分:0)

$。AJAX({           键入:&#34; POST&#34;,           url:&#34; JQueryServlets&#34;,           数据:{message:mge},           成功:函数(数据){               警报(&#39;成功&#39 +数据);           }         });

试试这段代码

和servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println(" inside do post "+request.getParameter("message"));
}

答案 5 :(得分:-1)

你发帖if(!$ rst){... 如果选择查询成功,是否会使插入查询不运行? 问候