1

class = 'editable' を持つ各 (空の) DIV (アルファベット文字で始まる一意の ID) のコンテンツを設定する次の jQuery があります。HTML の文字列を返すために、GET メソッドで MVC4 API コントローラーを使用しています。

何らかの理由で、以下の loadStuff 関数は、返されたコンテンツの前後に Web ページで見ることができる引用符を出力しています。これはすべての DIV で発生し、文字列を返す API コントローラー メソッドでは絶対に返されません。

$(document).ready(function () {
     $('.editable').each(function () {
          var curId = this.id.replace('content', '');
          loadStuff(curId, this.id);
     })
});

function loadStuff(curId, targetId) {
     $('#' + targetId).load('api/briefingItem/' + curId);
}

ただし、loadStuff 関数を以下のコードに置き換えて .appendTo を使用すると、引用符が表示されません。

function loadStuff(curId, targetId) {
     $.getJSON("api/briefingItem/" + curId,
          function (data) {
               $(data).appendTo('#' + targetId);
          })          
}

これは、単純な文字列を返すにはやり過ぎのようであり、ドキュメントが示唆しています。この異常な動作を説明できる人はいますか?

API コントローラー

// GET api/BriefingItem/5
public string Get(int id)
{
    string newVal = string.Empty;

    switch (id)
    {
        case 12:
            newVal = @"<p>this is some example text that you can edit inside the <strong>tinymce editor</strong>.</p><p>nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. nam sed lectus quam, ut sagittis tellus. quisque dignissim mauris a augue rutrum tempor. donec vitae purus nec massa vestibulum ornare sit amet id tellus. nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. aliquam molestie volutpat dapibus. nunc interdum viverra sodales. morbi laoreet pulvinar gravida. quisque ut turpis sagittis nunc accumsan vehicula. duis elementum congue ultrices. cras faucibus feugiat arcu quis lacinia. in hac habitasse platea dictumst. pellentesque fermentum magna sit amet tellus varius ullamcorper. vestibulum at urna augue, eget varius neque. fusce facilisis venenatis dapibus. integer non sem at arcu euismod tempor nec sed nisl. morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.</p>";
            break;
        case 13:
            newVal = @"<p>look up $(content).load() jquery method and the callback function.</p>";
            break;
        default:
            newVal =  @"<h3>click to enter content.</h3>";
            break;
    }

    return newVal;
}
4

2 に答える 2

3

Web APIからの実際の応答は、二重引用符で囲まれた文字列です。

$.getJSON()とメソッドの違いは、.load()メソッドは応答$.getJSONがJSONでエンコードされた文字列であると想定していることです=>二重引用符を取り除きます。ここで.loadはHTMLを想定し、結果に対して処理を行いません。

したがって、Web APIコントローラーアクションで、エンコードされた要求のtext/html代わりに次のように返すことができます。application/json

public HttpResponseMessage Get(int id)
{
    string newVal = string.Empty;

    switch (id)
    {
        case 12:
            newVal = @"<p>this is some example text that you can edit inside the <strong>tinymce editor</strong>.</p><p>nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. nam sed lectus quam, ut sagittis tellus. quisque dignissim mauris a augue rutrum tempor. donec vitae purus nec massa vestibulum ornare sit amet id tellus. nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. aliquam molestie volutpat dapibus. nunc interdum viverra sodales. morbi laoreet pulvinar gravida. quisque ut turpis sagittis nunc accumsan vehicula. duis elementum congue ultrices. cras faucibus feugiat arcu quis lacinia. in hac habitasse platea dictumst. pellentesque fermentum magna sit amet tellus varius ullamcorper. vestibulum at urna augue, eget varius neque. fusce facilisis venenatis dapibus. integer non sem at arcu euismod tempor nec sed nisl. morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.</p>";
            break;
        case 13:
            newVal = @"<p>look up $(content).load() jquery method and the callback function.</p>";
            break;
        default:
            newVal =  @"<h3>click to enter content.</h3>";
            break;
    }

    var response = Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(newVal, Encoding.UTF8, "text/html");
    return response;
}

これで、メソッドを使用できますが、.load()メソッドは使用できません$.getJSON

于 2012-09-26T08:31:02.927 に答える
0

コントローラー API の署名を投稿していただければ幸いです。

load と getJSON の動作は異なります。コントローラーが JsonResult を返すため、引用符を送信すると想定しています。load は、コントローラーによって返されたものを HTML として盲目的に投稿し、引用符を送信します。

于 2012-09-25T08:48:52.493 に答える