除非调试,否则jquery $ .post无效

时间:2013-12-23 14:48:05

标签: javascript php jquery

我有简单的表格来更新产品库存,它使用数据表为数据库中的所有项目生成行。当我在函数中设置断点时,我可以使用表单正确更新库存,但如果我删除断点,它将停止工作。

HTML表单:

<form id="updateStock">
  <input id="Penguincard" type="text" value="200">
  <input type="submit" onclick="updateStock("Penguincard", "Penguin card");" value="Update">                            
</form>

使用Javascript:

function updateStock(id, item){
    var idS = "#" + id;
    var newStock = $(idS).val();
    $.post("URL",{item: item, stock: newStock},  
        function(result){           
            alert(result);
        });
    return false;
}

PHP:

<?php
ini_set('display_errors', 1);

// Adds a new item to the database
require('common.php');



if ($_SERVER["REQUEST_METHOD"] == "POST"){  
    if (empty($_POST["item"])){
        echo 'item is blank';
        exit();
    }else
    {
        $item = test_input($_POST["item"]);
        // check if item only contains letters and whitespace
        if (!preg_match("/^[a-zA-Z0-9 ]*$/",$item))
        {
            echo 'item reg';
            exit();
        }
    }
    if (empty($_POST["stock"])) {
        echo 'stock is blank';
        exit();
    }else
    {
        $stock = test_input($_POST["stock"]);
        // check if stock only contains letters and whitespace
        if (!preg_match("/^[0-9]*$/",$stock))
        {
            echo 'stock reg';
            exit();
        }
    }   

}else{
    //don't run unless post
    echo 'Not post';
    exit();
}

$stmt = $db->prepare('UPDATE `stock` SET `stock`=:stock WHERE `item`=:item');

// bind the parameters to the insert after sanitizing them
$stmt->bindParam(':item', $item);
$stmt->bindParam(':stock', $stock);




//execute the insert
$status = $stmt->execute();

if( $status ){
    echo 'Item added successfully!';
    exit();     
}


//sanitizing function
function test_input($data)
{
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}


?>

编辑:通过不工作我的意思是它似乎运行onClick功能但不提交帖子。

从答案看来,调试似乎允许在默认表单操作发生之前提交帖子,从而使其正常工作。

2 个答案:

答案 0 :(得分:4)

您实际上从未实际取消提交按钮的click功能;来自updateStock函数的return false;,但实际上并没有做任何事情(onclick属性代码本身需要返回false。结果表单正在提交并且AJAX请求被取消。

最简单的解决方法是:

<input type="submit" onclick="return updateStock('Penguincard', 'Penguin card');" value="Update">

但是,使用jQuery绑定事件处理程序可能会更好:

$(':submit').on('click', function(e) {
    e.preventDefault();
    updateStock('Penguincard', 'Penguin card');
});

答案 1 :(得分:2)

这一行是问题所在:

onclick="updateStock("Penguincard", "Penguin card");"

属性中的双引号是问题所在。将它们转换为单引号。这是人们喜欢使用jQuery委托添加点击事件的一个原因。