未捕获的SyntaxError:意外的令牌{
Error prompted when execute console.log($obj.longurl)
from the Chrome Developer Console
Uncaught SyntaxError: Unexpected token {
$.ajax.complete
L jquery.min.js:19
N
Below is the script I execute from a HTML page and submit a form to call an external PHP file.
Javascript is called from http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
$('#shortener').submit(function(e) {
e.preventDefault();
$('#status').text('');
$.ajax({
cache: false,
type: "POST",
dataType: "json",
data: $('#shortener').serialize(),
url: $('#shortener').attr('action'),
complete: function (XMLHttpRequest, textStatus) {
console.log(XMLHttpRequest);
$obj = JSON.parse(XMLHttpRequest.response);
if ($obj.loginResult == "Passed") {
($('#longurl').val() === "") ? console.log("Empty longurl") : console.log($obj.longurl);
} else {
$('#status').text("Login Failed");
};
}
});
return false;
});
PHP
echo json_encode(array('loginResult' =>'Passed'));
echo json_encode(array('longurl' => BASE_HREF . $shortened_url));
typeof $obj.longurl
is string but don't know why it can be returned to the $('#shortener').val()
, anyone have similar experience and have the solution?
从Chrome Developer执行 下面是我从HTML页面执行并提交表单以调用外部PHP文件的脚本。 p>
从 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 强> p>
PHP p>
typeof console.log($ obj.longurl) code>时出现错误 控制台 p>
未捕获的SyntaxError:意外的令牌{
$ .ajax.complete
L jquery.min.js:19
N
code> pre> \ n
$('#shortener')。submit(function(e){
e.preventDefault();
$('#status')。text('');
$ .ajax({
cache:false,
type:“POST”,
dataType:“json”,
data:$('#shortener')。serialize(),
url:$('#shortener')。attr( 'action'),
complete:function(XMLHttpRequest,textStatus){
console.log(XMLHttpRequest);
$ obj = JSON.parse(XMLHttpRequest.response);
if($ obj.loginResult ==“ 传递“){
($('#longurl')。val()===”“)?console.log(”Empty longurl“):console.log($ obj.longurl);
} else {
$('#status')。text(“登录失败”);
};
}
});
返回false;
});
code> pre>
echo json_enco de(array('loginResult'=>'Passed'));
echo json_encode(array('longurl'=> BASE_HREF。 $ shortened_url));
code> pre>
$ obj.longurl code>是字符串但不知道为什么它可以返回到
$('#shortener')。val() code>,任何人都有类似的经验并有解决方案吗? p>
div>
Your PHP code is producing invalid JSON. You are basically echoing two JSON encoded objects after each other, which overall results in invalid JSON. It will look like:
{"loginResult": "Passed"} {"longurl": "<some URL>"}
The second {
is the syntax error.
It should either be an array of objects (although that would be a strange structure)
[{"loginResult": "Passed"}, {"longurl": "<some URL>"}]
or one object
{"loginResult": "Passed", "longurl": "<some URL>"}
Create and encode one array:
echo json_encode(array(
'loginResult' => 'Passed',
'longurl' => BASE_HREF . $shortened_url
));
Another problem might be that, at least officially, the jqXHR object passed to the complete callback doesn't have a .response
property. Since you also already set the dataType: 'json'
option, there is no need for you to parse the response explicitly.
Here is an improved version of your code:
$.ajax({
cache: false,
type: "POST",
dataType: "json",
data: $('#shortener').serialize(),
url: $('#shortener').attr('action'),
}).done(function (data) {
if (data.loginResult == "Passed") {
($('#longurl').val() === "") ? console.log("Empty longurl") : console.log(data.longurl);
} else {
$('#status').text("Login Failed");
}
});