Javascript Ajax调用给我一个未定义-未定义的错误?
谁能告诉我我做错了什么?我试图通过Ajax更新页面,这样当用户提交表单时,页面就会用新数据更新。现在,它成功地将数据插入到数据库中,但是我得到了一个“undefined-undefined”语句,我试图在其中附加新数据。有什么帮助吗 HTML: 试一试Javascript Ajax调用给我一个未定义-未定义的错误?,javascript,php,jquery,Javascript,Php,Jquery,谁能告诉我我做错了什么?我试图通过Ajax更新页面,这样当用户提交表单时,页面就会用新数据更新。现在,它成功地将数据插入到数据库中,但是我得到了一个“undefined-undefined”语句,我试图在其中附加新数据。有什么帮助吗 HTML: 试一试 $(“#账单”)。追加(“”+(data.billName-data.billmount)+“”; 如果减法操作周围没有(),Javscript将首先执行“”+date.billName,生成一个字符串。然后它将执行(string)-data.
$(“#账单”)。追加(“”+(data.billName-data.billmount)+“”;
如果减法操作周围没有
()
,Javscript将首先执行“”+date.billName
,生成一个字符串。然后它将执行(string)-data.billmount
,这是NaN。添加()
会强制Javascript在进行字符串连接之前进行减法运算。您是否试图从字符串(票据名称)中减去一个数字(票据金额)?如果是这样,这将导致JavaScript中出现特殊的NaN
值。如果您只是试图显示账单名称,后跟连字符,后跟账单金额,请尝试以下操作:
$("#bills").append("<p>" + data.billName + "-" + data.billAmount + "</p>");
$(“#账单”)。追加(“”+data.billName+”-“+data.billmount+””);
在JS中,+
用于连接字符串和数学运算
那么,当你在同一个语句中同时做这两件事时会发生什么呢?从左边开始,一直向右走
所以<代码>“”+data.billName-data.billmount+”“
可以被认为是类似于:
var a = "<p>" + data.billName; // string + number coerces the number to a string and concats
var b = a - data.billAmount; // ends up NaN because string minus number is no-go
var c = b + "</p>"; // NaN because any math with NaN equals NaN
var a=“”+data.billName;//string+number将数字强制为字符串和concats
var b=a-data.billAmount;//结果是NaN,因为字符串减去数字是不可能的
变量c=b+“”;//NaN因为任何有NaN的数学都等于NaN
因此,“”+data.billName-data.billmount+“”
的结果是NaN
尝试在数学部分周围加上括号,使其优先
“”+(data.billName data.billmount)+“”
这样的话,首先会进行数学运算,然后得到的数字会被强制转换成字符串,并与其他字符串连接起来……我很确定这就是你想要的
编辑-我明白你的意思是你实际上是想让减号实际上只是一个带连字符的字符串。现在,您将得到一个字符串
“undefined-undefined”
,作为最终结果
您的编辑完全更改了问题,使大多数答案的回答与现在显示的完全不同。在这种情况下,您可能希望以后将其作为新问题来回答
…但由于我们已经在这里…这表明data
对象上的billName
和billmount
属性不存在/未定义
您使用的
data
对象是AJAX调用的success
函数中的参数。你把它当作一个实际的对象……但是在你的AJAX调用中,我看不到任何地方可以将它转换成一个对象<代码>数据可能只是从PHP返回的数据字符串,而不是对象。哦,是的,你说得对。我修好了。但是现在我在页面上没有定义-没有定义。我想你需要在你的ajax调用中添加dataType:'json'
。嗯。。。当我添加数据类型时,似乎没有添加任何内容。是的,我刚刚意识到错误。我不想做任何手术。连字符应该在引号内。我修好了。现在我得到的是“未定义-未定义”而不是NaN。是的,我错了。如何将其转换为对象?@shawnkauffman-从PHP的外观来看,它似乎输出了JSON格式的字符串。jQuery AJAX可以将其作为一种预期的格式使用,如果您告诉它,可以通过向$.AJAX
函数调用中的对象添加数据类型:“json”
来自动执行。或者,您可以在success函数中使用一行,例如data=JSON.parse(data)使用数据变量之前,请执行代码>操作。无论哪种方法都可以。如果这不起作用,那么console.log
输出您的数据
字符串并发布,这样我们就可以确保获得了有效的JSON格式字符串。
if (@$_POST['action'] == 'addBill')
{
$billName = $_POST['bill_name'];
$billAmount = intval($_POST['bill_amount']);
$data = array(
'billName' => $billName,
'billAmount' => $billAmount,
);
echo json_encode($data);
$stmt = $db->prepare("INSERT INTO bills (billName, billAmount) VALUES(?,?)");
$stmt->bindParam(1, $billName);
$stmt->bindParam(2, $billAmount);
$stmt->execute();
}
$("#bills").append("<p>" + (data.billName - data.billAmount) + "</p>");
$("#bills").append("<p>" + data.billName + "-" + data.billAmount + "</p>");
var a = "<p>" + data.billName; // string + number coerces the number to a string and concats
var b = a - data.billAmount; // ends up NaN because string minus number is no-go
var c = b + "</p>"; // NaN because any math with NaN equals NaN