1

動的IDをパラメーターとして関数に渡し、htmlリンクに出力する以下の関数を定義しました。それが呼び出すスクリプトは、データベース レコードを更新し、クエリが成功したか、ID が何らかの検証に失敗したかに基づいて、成功または失敗のアラートを返します。

     function cancel_file(id){  
            jQuery.ajax({
            type: "POST",
            url: "https://www.mysite.com/cancel.php",
            data: 'id='+ id,
            cache: false,
            success: function(response){
                console.log(response);

                if(response == 1){
                    alert('File successfully cancelled!');
                    }
                }
            error: function(response){
                console.log(response);

                if(response == "invalid_id"){
                    alert('The file ID format is invalid');
                }else if(response == "no_record_found"){
                    alert('No file found with ID specified');
                }

            }
        });
    }

そして、私は次のように私のドキュメントのセクションでそれを呼び出しています

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js"></script>
<script type="text/javascript" src="/js/jquery.js"></script>

ページ上のリンクは、次の php コードを使用して出力されます

<?php echo "<a href='#' onclick='cancel_file(".$id.")'>Cancel </a>"; ?>

リンクをクリックしても何も起こらず、Chrome JS デバッガー コンソールを調べると、「Uncaught ReferenceError: cancel_file is not defined」と表示されます。document.ready() 内で定義された関数が Chrome と FF によって無視されることを読んだので、その宣言を一番上から削除しました。私はまだjQueryに慣れていないので、どんな助けでも大歓迎です。

ティア

cancel.php

<?php

// Get the fileid and make sure it's in a valid format
    $id = $_POST['id'];

    if(!ctype_digit($id)){
        $response = "invalid_id";
    }else{
        // If validation passes proceed to queries and cancellation process
            $q1 = "UPDATE `table_files` SET `is_invalid` = 1 WHERE `id` = '".$id."'";
            $r1 = mysql_query($q1) or die(mysql_error());

        if(mysql_affected_rows() > 0){
            $response = mysql_affected_rows();
        }else{
            $response = "no_record_found";
    }

    echo $response;
?>

$response は、jQuery 関数に戻す必要があるものです。

4

3 に答える 3

0

ajaxの最後から「?>」を削除します。スペースがあるかどうかを確認しますか?

于 2012-10-15T11:40:39.077 に答える
0

成功関数とエラー関数の間の ajax 呼び出しにタイプミスがあります (ただし、コピー/貼り付けの問題である可能性があります)。

それ以外に、グローバル関数を持つ代わりに、リンクのクリック イベントにバインドすることは受け入れられますか?

例えば:

jQuery('.cancel-trigger').on('click', function(){
    jQuery.ajax({
        type: "POST",
        url: "https://www.mysite.com/cancel.php",
        data: {
            id: jQuery(this).data('fileid')
        },
        cache: false,
        success: function(response){
            console.log(response);
            if(response == 1){
                alert('File successfully cancelled!');
                }
            }
            else if(response == "invalid_id"){
                alert('The file ID format is invalid');
            }else if(response == "no_record_found"){
                alert('No file found with ID specified');
            }
        },
        error: function(response){
            console.log(response);
            // this would run on an actual js/ajax error
        }
    });
});

次に、リンクを使用して、次のようにエコーできます。

<?php echo '<a href="#" data-fileid="' . $id . '" class="cancel-trigger">Cancel </a>'; ?>

そうすれば、グローバル関数がなく、インラインの onclick イベントの代わりにデータ属性を使用して ID を渡すことができます。

于 2012-10-15T00:24:06.260 に答える
0

PHPスクリプトをjQuery UIモーダルにロードしてそこで処理することで回避策を見つけました。まさに私が望んでいたものではありませんが、うまく機能します。

于 2012-10-16T19:52:33.963 に答える