2011-10-22 25 views
3

テンプレートのHTMLをAJAXリクエストで送信しようとしていますが、JSONPを使用してクロスオリジンエラーを発生させる必要がありますが、今はjsonpとしてデータ型を設定する必要があります。その結果、ajaxはテンプレートを取得し、「Uncaught SyntaxError:Unexpected token <」というメッセージが表示され、console.log(data)を取得すると「jQuery1640440755290677771_1319300298806が呼び出されませんでした。 underscore.jsテンプレートを使用するためにhtmlを取得できるように、どのようにajax呼び出しを修正できますか?JSONP経由でHTMLを送信する方法

ありがとうございました。

$.ajax({ 
    url: "url", 
    cache: "false", 
    crossDomain:"true", 
    dataType: "jsonp", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "f00"); 
    }, 
    success: function(html) { 
     console.log(html); 
    }, 
    error: function(data) { 
     console.log(data); 
    }, 

答えて

0

jsonlintにあなたの完全なJSONを貼り付け、それを壊すものを参照してください。たとえば、htmlで一重引用符を使用してみてください。

+0

JSONではなく、単なるHTMLページです。これはAJAXコールでは不可能ですか? – user995469

+0

dataTypeをjsonpに設定すると、jsonpが必要で、htmlにエラーがスローされます。そして、dataTypeをhtmlに設定すると、いくつかのブラウザでクロスオリジンエラーまたはセキュリティ違反エラーが発生すると述べています。私の知る限り、これを回避するために独自のバックエンドサービスを作成する必要があります。 – Lycha

0

dataTypeプロパティのリストオプションを使用します。詳細はthe docsを参照してください。ただし、TL; DRはdatatype: "jsonp html"です。それ以外の場合は、HTMLではなくJSONを返すことになります。

HTMLコンテンツをJSONとしてラップする必要がありますが、すでにこれを行っている可能性があります。

funcName({"key": "value"}) 

、オブジェクトを渡し、関数呼び出しである:

0

JSONPの形式です。 HTMLテンプレートをこのオブジェクトのプロパティに割り当てるだけです。結果は次のようになります。

funcName({"template": "<p>Template</p>"}) 

これに応じてサーバーを設定する必要があります。


別のオプションは、サーバーでAccess-Control-Allow-Origin: *レスポンスヘッダを設定することであろう(そしてもちろん、Ajax呼び出しのデータ型としてjsonを指定しないでください)。

詳細については、Cross-Origin Resource Sharingを参照してください。

関連する問題