0

伙计们,我正在研究 Editinplace 功能,在运行时我在 chrome 控制台上收到此错误,Uncaught SyntaxError: Unexpected token <我正在使用 node.js 片段执行此操作,如下所示

case '/':
res.writeHead(302,{'location':'http://localhost/editinplace/index.html'});
res.end();
break;
case '/save':
console.log("called");

    console.log("Inside called");
    res.write('_testcb(\'{"message": "Hello world!"}\')');
res.writeHead(302,{'location':'http://localhost/editinplace/save.html'});

res.end();
break;

index.html 的代码如下

<script type="text/javascript">
$(document).ready(function(){
setClickable();
});
function setClickable() {
$('#editInPlace').click(function() {
var textarea = '<div><textarea rows="10" cols="60">'+$(this).html()+'</textarea>';
var button = '<div><input type="button" value="SAVE" class="saveButton" /> OR <input type="button" value="CANCEL"class="cancelButton" /></div></div>';
var revert = $(this).html();
$(this).after(textarea+button).remove();
$('.saveButton').click(function(){saveChanges(this, false);});
$('.cancelButton').click(function(){saveChanges(this, revert);});
})
.mouseover(function() {
$(this).addClass("editable");
})
.mouseout(function() {
$(this).removeClass("editable");
});
};//end of function setClickable
function saveChanges(obj, cancel) {
if(!cancel) {
var t = $(obj).parent().siblings(0).val();
var data=t;
 $.ajax({
        url: 'http://localhost:9090/save',
        type:"GET",
        dataType: "jsonp",
        jsonpCallback: "_testcb",
        cache: true,
        timeout: 1000,
        data:{data:JSON.stringify(data)},
        success: function(data) {
        },
        error: function(jqXHR, textStatus, errorThrown) {
        }
    });
}
else {
var t = cancel;
}
$(obj).parent().parent().after('<div id="editInPlace">'+t+'</div>').remove() ;
}
</script>
</head>
<body>
<div id="editInPlace">Nilesh</div>
</body>

save.html 是包含在标签中的简单文本。<pre>错误显示在 save.html 第 1 行中。感谢您的努力。

4

1 回答 1

3

好的,这就是发生的事情:

  • 浏览器加载 index.html
  • 用户编辑字段并单击保存
  • saveChanges发出 AJAX GET 请求/save
  • 您的服务器代码发送带有 302 状态代码和 jsonp 正文的 HTTP 响应
  • 我认为浏览器正在透明地处理 302 状态码并忽略正文
  • 因此,您的 jquery 代码期望您的 javascript 来自 的响应正文/save,但它实际上是从/save.html. 这就是语法错误发生的地方,当 jquery 尝试将该 HTML 评估为 javascript 时,因为您告诉它dataTypewas jsonp

另请参阅有关浏览器自动处理重定向的问题

解决方案是您需要发送一个 200 响应代码,以便 jquery 可以执行 jsonp 操作,然后您可以根据需要更改window.location/save.html

于 2012-11-16T06:38:47.750 回答