1

ここで問題です。Web サービス呼び出しを行う 3 つのページがあります。最初にページにアクセスして呼び出しを行うと正常に動作しますが、2 番目のページに切り替えると、間違ったサービスに対して Web サービス呼び出しを試みます。ここにいくつかの情報があります:

ページ:

Page1.aspx - has Page1.js
Page2.aspx - has Page2.js

js ファイル:

Page1.js

var filterCriteria = "";

function GetList() {
    $.ajax({
        type: "POST",
        url: "/webServices/Page1.asmx/Page1List",
        contentType: "application/json; charset=utf-8",
        data: "{'letter':'" + filterCriteria + "'}",
        dataType: "json",
        success: function (result) {
            DisplayList(result.d);
        }
    });
}

function GetSearchResults() {
    $.ajax({
        type: "POST",
        url: "/webServices/Page1.asmx/Page1FilteredList",
        contentType: "application/json; charset=utf-8",
        data: "{'searchCriteria':'" + $("#Search").val() + "'}",
        dataType: "json",
        success: function (result) {
            DisplayList(result.d);
        }
    });
}

function DisplayList(object) {
    var html = '';
    for (var i = 0; i < object.length; i++) {
     //format results and append
    }
    if (object.length == 0) {
        html += "<li class=\"filteredList\" style=\"padding: 10px;\">No Results Found</li>";
    }
    $("#Page1List").html(html);
}

Page2.js

var filterCriteria = "";

function GetList() {
    $.ajax({
        type: "POST",
        url: "/webServices/Page2.asmx/Page2List",
        contentType: "application/json; charset=utf-8",
        data: "{'letter':'" + filterCriteria + "'}",
        dataType: "json",
        success: function (result) {
            DisplayList(result.d);
        }
    });
}

function GetSearchResults() {
    $.ajax({
        type: "POST",
        url: "/webServices/Page2.asmx/Page2FilteredList",
        contentType: "application/json; charset=utf-8",
        data: "{'searchCriteria':'" + $("#Search").val() + "'}",
        dataType: "json",
        success: function (result) {
            DisplayList(result.d);
        }
    });
}

function DisplayList(object) {
    var html = '';
    for (var i = 0; i < object.length; i++) {
     //format results and append    
    }
    if (object.length == 0) {
        html += "<li class=\"filteredList\" style=\"padding: 10px;\">No Results Found</li>";
    }
    $("#Page2List").html(html);
}

したがって、どちらも同じ呼び出しと同じ情報を持ちます。唯一の実際の違いは、結果が異なり、異なるデータを取得する異なる Web サービスに対して Web サービス呼び出しを行うことです。

切り替えるたびに、次の新しいjsファイルを取得します

jQuery-1.7.1.min.js/eval/seq/1
jQuery-1.7.1.min.js/eval/seq/2
jQuery-1.7.1.min.js/eval/seq/3
jQuery-1.7.1 .min.js/eval/seq/4

何回前後に切り替えるかによって異なります。eval を停止する方法はありますか、または使用しているコードの eval を jQuery に保存させる原因がコードにあり、それを解決するにはどうすればよいですか?

4

1 に答える 1

1

したがって、問題は、jquerymobileからページ遷移をロードしていたことでした。何が起こっていたのかというと、jquery mobileは、ページの読み込みを強制する代わりに、新しいページデータをDOMに追加します。これにより、両方のJavaScriptファイルが同時にロードされていました。つまり、最後にロードされたjsファイルがプライマリであり、両方のjsファイルが同じ名前の関数を呼び出していたため、複数回ロードされていました。

解決策
$.mobile.load()イベントを削除し、クリックイベントにパス名をURLに追加するように強制します

$("#GoPage1").on("click", function () { window.location = "/dir/Page1.aspx"; });
$("#GoPage2").on("click", function () { window.location = "/dir/Page2.aspx"; });
于 2012-04-29T00:14:17.410 に答える