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、実際には から HTML を取得しています/save.html。jquery がその HTML を javascript として評価しようとすると、構文エラーが発生しdataTypeますjsonp

リダイレクトを自動的に処理するブラウザに関するこの質問も参照してください

解決策は、jquery が jsonp を実行できるように 200 応答コードを送信する必要があり、その後、必要に応じて変更できるようwindow.location/save.htmlすることです。

于 2012-11-16T06:38:47.750 に答える