jQuery.ajax POST到脚本以更新未定义的MySQL函数

时间:2012-10-15 00:12:25

标签: php jquery

我定义了以下函数,它将动态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未定义”。我做了一些阅读,文档中定义的函数.Chut()被Chrome和FF忽略,所以我从顶部删除了该声明。我还是jQuery的新手,所以非常感谢任何帮助。

TIA

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函数。

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

从ajax.Check中的最后一个删除“?&gt;”是否有空格?

答案 2 :(得分:0)

我通过将PHP脚本加载到jQuery UI模式并在那里处理它找到了一种解决方法。不完全是我所希望的,但它很好地解决了这个问题。