Обработчик AJAX POST, вызывающий «необработанное исключение» - PullRequest
11 голосов
/ 05 апреля 2011

Итак, я несколько часов бился головой о свой стол, и я никуда не добираюсь, поэтому помощь будет по достоинству оценена.

В приведенном ниже коде есть два обработчика событий jquery, которыезапустить запрос AJAX.Первый использует GET, а данные, которые он получает с сервера, кодируются в формате JSON - он работает нормально.Второе возвращение («button # addTx») заставляет Firebug выдавать эту ошибку:

необработанное исключение: приглашение [Exception ... »прервано пользователем« nsresult: «0x80040111 (NS_ERROR_NOT_AVAILABLE)» местоположение: «JS frame :: resource: //gre/components/nsPrompter.js :: openTabPrompt :: line 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

?>

Ответы [ 2 ]

19 голосов
/ 05 апреля 2011

ПРОБЛЕМА РЕШЕНА: поэтому в разметке html форма, содержащая поля данных, должна содержать

onsubmit="return false;"

!

Спасибо за помощь, ребята, я реализовалавсе ваши предложения и мой код теперь оооочень меньше и им легче управлять!

Cheers

Simon

0 голосов
/ 19 марта 2014

Спасибо за размещение решения.Точно так же ударился головой, пытаясь решить подобную проблему с NS_ERROR_NOT_AVAILABLE без удачи.Полезно для тех, кто использует Django <-> Javascript для выполнения запросов XMLHttpRequest.На стороне Django есть

   error: [Errno 32] Broken pipe 

..., который соответствует NS_ERROR, который появляется в консоли firebug для сбоя JS. (GoogleBait) Трудно знать, где начать отслеживать проблемуна стороне сервера или на стороне клиента.

Спасибо еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...