【问题标题】:JSON SyntaxError: Unexpected end of inputJSON SyntaxError:输入意外结束
【发布时间】:2015-08-05 02:46:51
【问题描述】:

我有以下 ajax 调用,我在其中以 JSON 格式传递数据,当执行此代码时,我收到如下所示的错误,我在下面显示了 Console.log(data_cp),并在 http://jsonlint.com/ 中验证了它这是经过验证的输入?我在这里遗漏了什么?如何解决此错误?我查看了其他帖子,例如 json parsing error syntax error unexpected end of input,但无法弄清楚...

        $.ajax({
            dataType: "json",
            type: "POST",
            contentType: "application/json",//note the contentType defintion
            url: "scripts/cherrypick.py",
            data: JSON.stringify(data_cp),
            //data: data_cp,
            error : function (xhr, ajaxOptions, thrownError){
                alert(xhr.status);
                alert(thrownError); 
            },
            success: function(message){
                console.log("cherypick sucess");        
            }

服务器端 python 脚本:-

#!/usr/bin/python
import os
import sys
import json
print "Content-type: application/json\n\n"
...............
...............
def main(): 
    result = {'success':'true','message':'The Command Completed Successfully'}
    cherrypicklist = []
    cherrypickfaillist = []
    myjson = json.load(sys.stdin)
    gerritlist = myjson['gerrits']  
    resource = r'buildserver'   
    buildlocation = r'cd /local/mnt/workspace/user/buildlocation ; '
    for gerrit in gerritlist:
        cmd  = buildlocation
        project,ref = fetchgerritproject(gerrit, connection=None)   
        proj_path = getprojectpath(project)
        cmd += 'cd ' + proj_path + ' ;' 
        new_cmd = ' gknife am-or-cp ' + gerrit
        pick_cmd = cmd + new_cmd    
        errorlist =''
        errorlist =  cherrypick(resource,pick_cmd)      
        if len(errorlist) <= 2:
            cherrypicklist.append(gerrit)
        else:
            chk_cmd =  cmd + ' git checkout -f'
            connection = ssh_connect(resource)
            errorlist = execute_command(connection,chk_cmd)
            cherrypickfaillist.append(gerrit)           

    for gerrit in cherrypicklist:   
        cmd  = buildlocation
        project,ref = fetchgerritproject(gerrit, connection=None)   
        proj_path = getprojectpath(project)
        cmd += ' cd ' + proj_path + ' ;'    
        errorlist =  resetgerrit(resource,cmd)

    errorlist = execute_command(connection,chk_cmd)
    print json.dumps(result)
    #return 

if __name__ == "__main__":
    main()

错误:-

SyntaxError: Unexpected end of input

Console.log(data_cp) 输出:-

{"gerrits":["1258565","1279604"]}

【问题讨论】:

  • 您是否在 JQuery 或 python 脚本中收到错误?
  • 不知道我明白了,你有没有使用 javascript 将对象字符串化为 JSON 的问题,如果是,ajax 调用与它有什么关系?如果您删除了除JSON.stringify(data_cp) 之外的所有内容,您还会收到相同的错误吗?
  • @codesnooker - 它来自alert(xhr.status); alert(thrownError),如果我将其注释掉,错误就会发生,但调用也不会成功:函数
  • @adeneo - 错误来自上述评论中所述的 ajax 调用..
  • 那你不是从服务器端返回有效的JSON

标签: javascript python json


【解决方案1】:

根据 Jquery 文档中错误方法的定义,您会从服务器端收到错误,或者如果调用不成功。

所以这意味着您从服务器收到错误。检查服务器代码。

JQuery 中错误方法的定义

错误类型:函数(jqXHR jqXHR,字符串 textStatus,字符串 errorThrown ) 请求失败时调用的函数。这 函数接收三个参数: jqXHR(在 jQuery 1.4.x 中, XMLHttpRequest) 对象,一个描述错误类型的字符串 发生和一个可选的异常对象,如果发生了。可能的 第二个参数的值(除了 null)是“超时”、“错误”、 “中止”和“解析器错误”。发生 HTTP 错误时,errorThrown 接收 HTTP 状态的文本部分,例如“未找到” 或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以 接受一个函数数组。每个函数都会被依次调用。 注意:跨域脚本不调用此处理程序,并且 跨域 JSONP 请求。这是一个 Ajax 事件。

【讨论】:

  • 我更新了服务器端 python 脚本。问题是我在 JSON 中有一个变量 `result = {'success':'true','message':'The Command Completed Successfully'} `格式,最后我尝试“打印 json.dumps(result)”,以便脚本以 JSON 格式输出,由于某种原因打印不起作用..这在以前的情况下对我有用,不知道为什么它现在失败了?
  • 如果您到达声明,您可以添加检查:print json.dumps(result);如果是,那么如果您不使用 json.dumps 来简单地打印结果,那么输出是什么?
猜你喜欢
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2023-03-21
  • 2017-01-05
相关资源
最近更新 更多