-1

div のコンテンツの変更に問題があります。最初に ajax 呼び出しを行い、サーバーから JSON 配列を受け取ります。ここまでは順調ですね。次に、いくつかの div のコンテンツをサーバーから受け取ったものに変更したいと考えています。問題は、最初のクリックでコンテンツが変更されないことです。応答は毎回問題ありません。Fiddler とコードで、正しい応答を受け取っていることを確認しました。しかし、なぜ私のページの div が最初のクリックで変更されないのか、なぜ毎回 2 回クリックしなければならないのかという謎が残ります。私はこれを理解するのに何時間も費やし、すべてを試しましたが、論理的なものは何もないようです. これが私のコードです(プロジェクトはMVC 4です):

$('#btnsearch').click(function ()
{
    var searchStr = $('#txtSearch').val();
    var noOfPages = 1;

    $.ajax({
        type: "POST",
        datatype: 'json',
        url: $('#btnsearch').data('request-url'),/*URL from Razor's page*/
        data: { pageNo: noOfPages, searchString: searchStr },/*MVC 4 call*/
        success: function (jsontext)
        { 
            $('#hiddenSearchResult').val(jsontext);
        },
        error: function ()
        {
            alert('Error when searching!');
        }
    });

    var json = $('#hiddenSearchResult').val();
    if (json.length === 0){ alert('result is empty!');
    return;}/*with empty json, parsing throws error*/
    json = JSON.parse(json);
    if (json.Content == undefined) return;

    for (var i = 0; i < json.Content.length; i++) {
        switch (i) {
            case 0:

                $('#snippetsdivinner').html(json.Content[i].ContentString);
                break;
            case 1:

                $('#snippetsdivinner1').html(json.Content[i].ContentString);
                break;
            case 2:

                $('#snippetsdivinner2').html(json.Content[i].ContentString);
                break;
            case 3:

                $('#snippetsdivinner3').html(json.Content[i].ContentString);
                break;
        }
    }
});
4

4 に答える 4

3

それ以降のコードvar json = $('#hiddenSearchResult').val()は、AJAX リクエストが開始された直後に実行されますが、完了する前に実行されるため、その時点$('#hiddenSearchResult')ではまだ入力されていません。

ボタンを 2 回目にクリックすると、AJAX リクエストの完了によってボタンが設定されているため、後のコード$.ajaxは期待どおりに実行されます。

コードをsuccess関数内に移動して、AJAX 要求が完了したときにすべてが実行されるようにする必要があります。

于 2013-08-08T11:53:16.340 に答える