1

私は朝からこれを見てきましたが、どこに問題があるのか​​ わかりません..

これは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"].'" />

アラートは機能しているように見えますが、変更は有効にならず、データベースに変更はありません

4

6 に答える 6

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」を使用します。.on()また、「ライブ」は非推奨です。代わりに委任を使用する必要があります。

于 2013-06-04T08:43:05.693 に答える
0

ファイルの場所を確認します。subscribe.php はどこですか? javascriptファイルはどこにありますか。firebug Firefoxアドオンを使用してコンソールに移動し、ajaxリクエストの詳細を確認してください。subscribe.php を見つけることができるかどうか

それ以外の場合は、ajax リクエストの「url」パラメーターに相対パスを指定します

その他の理由としては、require_once("functions.php"); の失敗が考えられます。なので、die("hii"); と書いてみてください。subscribe.php のその行の上

于 2013-06-04T08:58:31.817 に答える
0

以下のようなライブ関数 on() の代わりに、うまく動作します。

$('#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);
        }
    });
});
于 2013-06-04T09:20:24.620 に答える
0

$.ajax({ type: "POST", url: "JQueryServlets", data: { message : mge}, success : function(data){ alert('success'+data); } });

このコードを試してください

そしてサーブレットで

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println(" inside do post "+request.getParameter("message"));
}
于 2014-11-12T17:44:20.637 に答える
-1

if(!$rst){ を投稿すると、選択クエリが成功した場合に挿入クエリが実行されませんか? よろしく

于 2013-06-04T08:41:20.343 に答える