javascript 语法错误:输入 parseJSON 意外结束
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25173727/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
syntax error: unexpected end of input parseJSON
提问by mobro
I'm on about hour 5 of this and figure it's time to ask for help. I'm trying to use AJAX+php to upload an image and some text data on a form to a database. The total system is:
我在大约第 5 个小时,我认为是时候寻求帮助了。我正在尝试使用 AJAX+php 将表单上的图像和一些文本数据上传到数据库。整个系统是:
an input page with a form, social.php
a php processing page, postMsg.php
and a javascript function postMsg()
that posts the form to the php processing page and is supposed to return the results to a div on social.php
一个带有表单的输入页面,social.php
一个 php 处理页面,postMsg.php
以及一个postMsg()
将表单发布到 php 处理页面并应该将结果返回到 div 上的 javascript 函数social.php
The problem is that the $.parseJSON(data) command in the javascript results in an "unexpected end of input" error:
问题是 javascript 中的 $.parseJSON(data) 命令导致“意外的输入结束”错误:
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
I thought there was an issue with my javascript, but I code-checked it and it's fine:
我以为我的 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;
}
Then I thought there was an issue with my php, but replaced it all with a simple command and it still resulted in the same error:
然后我以为我的 php 有问题,但是用一个简单的命令替换了它,它仍然导致相同的错误:
$json_array = array('selfie'=>'hello');
Then I thought there might be an issue with my input form, so I rewrote that, but it's still returning the same error:
然后我认为我的输入表单可能有问题,所以我重写了它,但它仍然返回相同的错误:
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"> </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>
Any ideas?
有任何想法吗?
回答by Breedly
This plagued me for sometime as most of the answers to this same question get caught running down rabbit holes. Plus, the answer is hidden DEEPwithin the jquery
documentation for the ajax object. Without further ado:
这困扰了我一段时间,因为同一问题的大多数答案都被抓住了。此外,答案是隐藏深的范围内jquery
为Ajax对象文档。无需再费周折:
"json": Evaluates the response as JSON and returns a JavaScript object. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)
“json”:将响应评估为 JSON 并返回一个 JavaScript 对象。JSON 数据以严格的方式解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。从 jQuery 1.9 开始,空响应也会被拒绝;服务器应改为返回 null 或 {} 响应。(有关正确 JSON 格式的更多信息,请参阅 json.org。)
Ergo, you must always at least return an empty JSON object or null from any request in order for jquery
to accept it as valid.
因此,您必须始终至少从任何请求中返回一个空的 JSON 对象或 null,以便将jquery
其接受为有效。