AJAX POST 处理程序导致“未捕获的异常”


AJAX POST handler causing "uncaught exception"

所以我在这个问题上已经把

头撞在桌子上几个小时了,但我一无所获,所以非常感谢帮助。

下面的代码有两个 jquery 事件处理程序,它们触发 ajax 请求。第一个使用GET并且它从服务器返回的数据是JSON编码的 - 它工作正常。第二个("button#addTx")返回导致Firebug产生此错误:

未捕获的异常:[异常... "提示被用户中止" nsresult : "0x80040111(NS_ERROR_NOT_AVAILABLE)" 位置:"JS帧:: resource://gre/components/nsPrompter.js :: 打开选项卡提示符 :: 第 468 行"数据: 否]

第 0 行

这根本无济于事。服务器端脚本将原始 html 打印到屏幕上,目的是使用 jquery html 替换来更新到发起请求的页面。随着数据库的更新,数据被正确开机自检,但除此之外,我一无所知。我已经重写了它以尝试 GET 并且仍然产生相同的错误:-(

帮助将是惊人的 - 谢谢你,西蒙

$(document).ready(function(){
$("button.delete").click(function(){
    var txid = this.id;
    var amountID = "#amount" + txid;
    var amount = $(amountID).html();
    // <![CDATA[
    var url = "delete.php?txid=" + txid + "&am=" + amount;
    $.ajax({
        type: "GET",
        url: url,
        success: function(msg){
            txid = "ul#" + txid;
            $(txid).hide();
            var values = msg;
            var e = "#" + values.category + "AmountLeft";
            var a = values.amount;
            $(e).html(a);
        }
    });
});
$("button#addTx").click(function(){
    // <![CDATA[

    var url = "addTran.php";
    //var dataV = var data = "category=" + document.getElementById("category").value + "&what=" + document.getElementById("what").value + "&amount=" + document.getElementById("amount").value + "&date=" + document.getElementById("date").value;
    $.ajax({
        type: "POST",
        url: "addTran.php",
        //async: false,
        data: "category=Groceries&what=Food&amount=2.33&date=2/3/2011",
        success: function(msg){
            $("transList").replaceWith(msg);
        }
    });
});
});

这是服务器端脚本

<?php
session_start();
include('functions.php');
//if the user has not logged in
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}

$category = $_POST['category'];
$what = $_POST['what'];
$amount = $_POST['amount'];
$date = $_POST['date'];
$category = mysql_real_escape_string($category);
$what = mysql_real_escape_string($what);
$amount = mysql_real_escape_string($amount);
$date = mysql_real_escape_string($date);
$date = convertDate($date);
//add trans to db
include('dbcon.php');
$query = "INSERT INTO transactions ( category, what, amount, date) VALUES ( '$category','$what','$amount','$date');";
mysql_query($query);
//grab the remaining amount from that budget
$query = "SELECT amount_left FROM cards WHERE category = '$category';";
$result = mysql_query($query);
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$oldAmountLeft =  $row["amount_left"];
//update the amount left
$amountLeft = $oldAmountLeft - $amount;
mysql_free_result($result);
//add new value to db
$query = "UPDATE cards SET amount_left = '$amountLeft' WHERE category = '$category';";
mysql_query($query);

//generate the list of remaining transactions, print to screen to send back to main page
$query = "SELECT txid, what, amount, date FROM transactions WHERE category = ('$category');";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $d = convertDateReverse($row["date"]);
    $what = $row["what"];
    $amount = $row["amount"];
    $txid = $row["txid"];
    ?>
        <li><ul class="trans" id="<? echo $txid; ?>"><li class="date"><? echo $d; ?></li><li class="what"><? echo $what; ?></li><li class="amount" id="amount<? echo $txid; ?>"><? echo $amount; ?></li><button class="delete" id="<? echo $txid; ?>">Delete</button><li></li></ul></li>
    <?
}
mysql_free_result($result);

mysql_close();
header("Content-type: application/x-www-form-urlencoded"); //do I need this? I have a " header("Content-type: application/json"); " in the working one
?>

问题已解决:因此,在HTML标记中,保存数据字段的表单应具有

onsubmit="return false;"

在里面!

感谢所有的帮助,我已经实现了您的所有建议,我的代码现在更小,更易于管理!

干杯

西蒙

感谢发布解决方案。同样,我撞了一会儿头,试图用NS_ERROR_NOT_AVAILABLE解决类似的问题,但没有运气。对于使用 Django <-> Javascript 来执行 XMLHttpRequests 的人也很有用。 在Django方面,有一个

   error: [Errno 32] Broken pipe 

。这与 Firebug 控制台中出现的 JS 故障NS_ERROR相对应。(谷歌诱饵) 很难知道从哪里开始跟踪问题 - 服务器端或客户端。

再次感谢。