0

ここでは明らかに何か間違ったことをしていますが、Ajax が起動せず、代わりにページの読み込みを要求する理由がわかりません。newBatable() は正常に起動しますが、ajax 呼び出しを尊重するための投票を得ることができないようです。

HTML - html をコードとしてここに入れる方法がわからない :/ - 私はばかげているように感じます。

<form class="form-horizontal" id="batable1" action="vote.php" method="GET">
    <div id="success-vote-1"></div>
    <input type="radio" name="batableResult" value=" include ()" /> include ()<br/>
    <input type="radio" name="batableResult" value="require ()" />require ()<br/>
    <input type="radio" name="batableResult" value="both of above" />both of above<br/>
    <input type="radio" name="batableResult" value="None of above" />None of above<br/>
    <button class="btn btn-primary" onClick="vote(1)">Vote</button>
    <input type="hidden" name="batableId" id="batable-id" value="1"/>
</form>

JS - コンソールには必要なものがすべて表示されます。php スクリプトはすべてを適切に処理し、完全に機能します。ブラウザに php をロードする必要があるだけなので、AJAX を使用していません。

/***************************************/
function newBatable() {
var batableData = $('#new-batable').serialize();
//console.log(batableData);
    $.ajax({
        url: "process.php",
        data: batableData,
        success: function(data){
            $('#success-new-batable').html(data);
        }
    });
}

/***************************************/
function vote(poll_id) {
//console.log(poll_id)
var batableId = "#batable" + poll_id;
//console.log(batableId)
var pollData = $(batableId).serialize();
//console.log(pollData);
    $.ajax({
        url: "vote.php",
        data: pollData,
        success: function(data){
            var batable_success_id = "#success-vote" + poll_id;
            $(batable_success_id).html(data);
        }
    });
}
4

3 に答える 3

3

送信ボタンは JavaScript を起動し、すぐにフォームを送信します。

を使用している場合はonclick、それreturn falseを停止します。

ただし、より最新のイベント バインディング手法を使用する方がよいでしょう。

于 2013-05-30T16:08:43.400 に答える
2

jquery経由でクリックイベントをボタンに付けてみてはいかがでしょうか?

$(".btn").on('click', function(e){
    e.stopPropagation()
    e.preventDefault();
    vote(1);
});

これは通常、外部ファイルのドキュメント .ready jquery に配置するか、スクリプト タグ内のページの下部近くに配置します。

これは役に立ちますか?

于 2013-05-30T16:12:34.070 に答える
1

すでに SubstanceD として jQuery を使用しているため、jQuery の on() メソッドを使用してイベントの伝播を停止し、デフォルト アクション (フォームの送信) を防止する必要があります。

また、コードにバグの可能性があることにも気付きました。タイプミスがあるようです。あなたが持っている

var batable_success_id = "#success-vote" + poll_id;

<div id="success-vote-1"></div>。たとえば、 に連結しているときvoteに、 の ID の後にダッシュがあります。したがって、AJAX 呼び出しが行われたとしても、期待どおりに HTML が更新されない可能性があります。divbatable_success_id#success-vote1

于 2013-05-30T16:24:28.773 に答える