当前位置: 首页 > 知识库问答 >
问题:

语法错误:输入parseJSON的意外结尾

鲁明知
2023-03-14

我在第5个小时,我想是时候寻求帮助了。我正在尝试使用Ajax+PHP将表单上的一个图像和一些文本数据上传到数据库。整个系统是:

一个包含表单social.phpphp处理页面postmsg.php和javascript函数postmsg()的输入页面,该函数将表单发布到php处理页面,并将结果返回给social.php上的div

问题是javascript中的$.parsejson(data)命令会导致“Input end of Input”错误:

Failed:  
SyntaxError {stack: (...), message: "Unexpected end of input"}
(index):156
Uncaught SyntaxError: Unexpected end of input jquery.js:4235
b.extend.parseJSON jquery.js:4235
(anonymous function) (index):158
c jquery.js:4611
p.fireWith jquery.js:4687
k jquery.js:10335
r

我以为我的javascript有问题,但我对它进行了代码检查,结果没有问题:

     function postMsg() {
        console.log("submit event");
        var fd = new FormData(document.getElementById("commentSubmit"));
        fd.append("label", "WEBUPLOAD");
        document.getElementById('progressBar').style.display = 'block';

        $.ajax({
          url: "postMsg.php",
          type: "POST",
          xhr: function() {  // Custom XMLHttpRequest
            var myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // Check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload
            }
            return myXhr;
          },
          data: fd,
          enctype: 'multipart/form-data',
          processData: false,  // tell jQuery not to process the data
          contentType: false   // tell jQuery not to set contentType
        }).done(function( data ) {
            console.log("PHP Output:");
            console.log( data );

            try {responseData = $.parseJSON(data)}
            catch (e) {console.log('Failed: ', e, data);}

            var items = $.parseJSON(data);
            document.getElementById('progressBar').style.display = 'none';
        });
        return false;
    }

然后我认为我的php有问题,但用一个简单的命令替换了它,但仍然会导致同样的错误:

$json_array = array('selfie'=>'hello');

然后我想我的输入表单可能有问题,所以我重写了它,但它仍然返回相同的错误:

echo '<div data-role="fieldcontain" style="margin-top: -30px;margin-bottom: -30px;border-bottom: 0px;">
                <form method="post" name="commentSubmit" id="commentSubmit">
                  <div style="width=100%; font-size:.9em;" data-role="fieldcontain">
                  <label class="ui-input-text" for="msg_txt">Chip in:</label>';

//          $selfie = get_selfie($uid);
        echo '<div style="margin-top: 10px; margin-bottom: 10px; display: block; font-size:.9em">';

echo '<input name="file" type="file">';
        echo '<textarea style="width:100% text-align:left; font-weight:normal;" class="ui-btn ui-btn-inline ui-btn-icon-notext ui-btn-up-c" data-iconshadow="true" data-shadow="true" data-corners="false" cols="23" rows="1" name="msg_txt" id="msg_txt"></textarea>';
        echo '<a style="border-radius:8px" class="ui-btn ui-btn-inline ui-btn-icon-notext ui-corner-right ui-controlgroup-last ui-btn-up-c" title="My button" data-wrapperels="span" data-iconshadow="true" onclick="postMsg();" data-shadow="true" data-corners="true" data-role="button" data-icon="search" data-iconpos="notext" data-theme="c" data-inline="true"><span class="ui-btn-inner ui-corner-right ui-controlgroup-last"><span class="ui-btn-text">My button</span><span class="ui-icon ui-icon-search ui-icon-shadow">&nbsp;</span></span></a>';
        echo '<div id="photoUploaded" style="display: none;
position: relative;
text-align: center;
background-color: white;
opacity: .5;
color: black;
float: right; 
vertical-align: middle;
font-family: sans-serif;
border-radius: 10px;
padding: 10px;">photo loaded</div>';

                  echo '<input name="refresh" value="1" id="refresh" type="hidden">
                    <input name="uname" value="'.get_name($uid).'" id="uname" type="hidden">
                    <input name="uid" value="'.$uid.'" id="uname" type="hidden">

                </form>

有什么想法吗?

共有1个答案

伯彦君
2023-03-14

这个问题困扰了我一段时间,因为这个问题的大多数答案都被抓到了。另外,答案隐藏在ajax对象的jQuery文档中。二话不说:

jquery.ajax:数据类型

“JSON”:将响应计算为JSON,并返回一个JavaScript对象。以严格的方式解析JSON数据;将拒绝任何格式错误的JSON,并抛出解析错误。从jQuery 1.9开始,空响应也会被拒绝;服务器应返回null或{}的响应。(有关正确的JSON格式的更多信息,请参阅JSON.org。)

因此,您必须从任何请求中至少返回一个空的JSON对象或null,以便jQuery接受它为有效。

 类似资料:
  • 我得到了的意外结束。代码对我来说很好,我错过了什么? 安慰:

  • 我试图使用下面的代码从一个api网站获取一个JSON文件,但是当我使用下面的代码获取时,我得到一个错误,说“JSON输入意外结束”

  • 问题内容: 我得到了以下代码 请注意,我对数据值进行了硬编码。数据被很好地推送到数据库中。但是,我不断收到错误“解析错误语法错误,输入意外结束”。我确定我的数据使用正确的JSON语法。当我在Chrome检查器的网络上进行检查时,saveProduct请求显示数据正确。 此POST请求没有响应。因此,我对于解析错误的来源一无所知。我尝试使用FireFox浏览器。同样的事情发生了。 任何人都可以对什么

  • 我正在尝试在Go API服务器和基于React的前端之间发送JSON。我得到以下错误: 错误:SyntaxError:JSON输入意外结束 它说这发生在第25行,这是 这是相关的函数: 在尝试了一些故障排除之后,我将错误捕捉添加到带有“成功”和“错误”输出的函数中,这样它至少可以停止弹出错误页面,并在API服务器上添加一些控制台输出,以查看数据是否正在传递。 除了出现错误之外,一切似乎都在按预期运

  • 问题内容: 我有一个如下所示的Web API控制器: 这是正确的语法,但是当我尝试从Angular 2的服务中调用它时,出现错误消息:“ json解析错误语法错误输入意外结束”。要解决此问题,我必须在ActionResult中输入一个值,例如 我是否缺少某些配置?我的Angular 2服务电话如下所示: 问题答案: 我猜想,当您收到一个空响应(没有有效负载)时,您无需调用该方法。在后台,XHR响应

  • 我正在制作一个专用于电子邮件订阅者的组件...喜欢这个 然而,我只得到这样的回应 你知道我如何解决这个问题吗?我让它变得像人们输入他们的电子邮件一样简单,只需单击按钮,就这样。 非常感谢您的任何帮助!