当将整数值从表单传递到Javascript函数时,无效的文字错误



我正试图将Integer从表单传递到Javascript函数。我用parseInt()得到了值,像这样:

var student_age= parseInt($("#age").val());

然后存储为JSON,如下所示

"age": student_age

但是当我点击提交按钮,我得到一个Internal server error。我将其跟踪到我的python代码,直到我试图将值从表单传递到服务器的行。

student_age = int(self.request.get('age'))

这就是我得到ValueError: Invalid literal for int() with base 10: 'NaN'

的地方

我试过改变"age": student_age"age": str(student_age)没有运气

编辑Python代码:

class StudentRegistrationHandler(webapp2.RequestHandler):
    def post(self):
       ...
       if student:
           #do stuff
       else:
           student_age = int(self.request.get('age'))
           ...

parseInt如果提供的字符串不是数字,则给出数字或NaN。NaN是Not-A-Number的缩写。如果int获取的字符串不是数字,Python将抛出ValueError。您有两种可能性:如果用户输入一个数字并且只向服务器发送正确的请求,则在Javascript中检查;如果age参数确实是一个数字,则在python代码中检查。

从错误消息来看,看起来您试图在Python中使用int(基数10)将字符串 "NaN"转换为整数。这是行不通的,因为Python不识别NaN

在Python中,可以请求原谅

try:
    student_age = int("NaN")
except:
    student_age = -1 # impossible age but valid int fallback
现在

student_age == -1

且未引发异常

我终于发现我的代码出了什么问题。我犯了一个愚蠢的错误。我还声明了另一个变量:

var year = parseInt($("year").val());

但是我忘了在year之前添加#。由于这个变量是在student_age变量之前声明的,我认为错误影响了两者。我使用console.log()测试了存储在这些变量中的内容,发现age是int, year是NaN。

最新更新