导致“未捕获异常"的 AJAX POST 处理程序 [英] AJAX POST handler causing "uncaught exception"

查看:44
本文介绍了导致“未捕获异常"的 AJAX POST 处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我在这个桌面上用头撞了几个小时,但一无所获,因此非常感谢您的帮助.

So I've been banging my head against my desk for a few hours on this one and i'm not getting anywhere so help would really be appreciated.

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

The code below has two jquery event handlers which fire off an ajax request. The first one uses GET and the data it gets back from the server is JSON encoded - it works fine. The second one ( "button#addTx" ) returns causes Firebug to produce this error:

未捕获的异常:[异常...提示被用户中止" nsresult:0x80040111(NS_ERROR_NOT_AVAILABLE)"位置:JS框架::资源://gre/components/nsPrompter.js:: openTabPrompt :: line 468" 数据:没有]

uncaught exception: [Exception... "prompt aborted by user" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: resource://gre/components/nsPrompter.js :: openTabPrompt :: line 468" data: no]

第 0 行

这根本没有帮助.服务器端脚本将原始 html 打印到屏幕上,目的是使用 jquery html 替换来更新启动请求的页面.数据在数据库更新时正确发布,但除此之外我不知道.我已经重写它以尝试 GET 并仍然产生相同的错误:-(

which is no help to at all. The server side script is printing raw html to the screen and the aim is that a jquery html replace will be used to update to the page which initiates the request. The data is POSTed correctly as the database updates but beyond that I have no clue. I have rewritten it to try a GET and still produce the same error :-(

帮助会很棒 - 谢谢你,西蒙

Help would be amazing - thank you, Simon

$(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

?>

推荐答案

PROBLEM SOLVED: 所以在 html 标记中,保存数据字段的表单应该有一个

PROBLEM SOLVED: so in the html markup the form that holds the fields of data should have an

onsubmit="return false;"

在里面!

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

Thanks for all the help guys, I have implemented all your suggestions and my code is now soooo much smaller and easier to manage!

干杯

西蒙

这篇关于导致“未捕获异常"的 AJAX POST 处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆