1

ここであなたの助けと知識を求めるのは初めてです!AJAXスクリプトに問題があり、XMLからファイルをダウンロードするための「if」条件を追加しています。

一般に、スクリプト自体は機能しますが、何らかの方法で追加する必要のある関数'if'はありません。私はグーグルで助けを探していましたが、結果はありませんでした:(よく理解していれば、条件'IF、ELSE'が追加されたはずですが、これを行う方法がわからないので、これであなたの助けを本当に感謝します。私のためにこのコードを助けて追加することができました私は非常に感謝しています!

// this is not active now becouse i don't use this xml file
$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "premier-rates.xml",
        dataType: "xml",
        success: parseXml
    });
    // this is my XML file
    $.ajax({
        type: "GET",
        url: "go-rates.xml",
        dataType: "xml",
        success: parseXml_go
    });

    $("#selCountry").change(onSelectChange);
    $("#selCountry_go").change(onSelectChange_go);

});

function gup(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null) return "";
    else return results[1];
}

function parseXml(xml) {

    $(xml).find("db_rates").each(function() {
        var this_countryname = $(this).find("country").text();
        var this_id = $(this).find("id").text();
        var curOption = $("<option value='" + this_id + "'>" + this_countryname + "</option>")
        curOption.data("db_rates", $(this)); // bind the country node data from the XML to the                                             option of the dropdown
        $(curOption).appendTo($('#selCountry'))
    });

}

function onSelectChange() {
    var selected = $('#selCountry').children(':selected').data('db_rates');

    $('#rates_output').html("");
    var this_country = $(selected).find('country').text();
    var this_landlineRates = $(selected).find('landline_rates');
    var this_mobileRates = $(selected).find('mobile_rates');

    $("#rates_output").append("<p class='dest_title'>" + this_country + "</p>");
    $("#rates_output").append("<ul><li><div class='dest_list'>Landline</div><div class='dest_list'>" + this_landlineRates.text() + "p /min</div><div class='clear'></div></li><li><div class='dest_list'>Mobile</div><div class='dest_list'>" + this_mobileRates.text() + "p /min</div><div class='clear'></div></li></ul>");

    //$("#rates_output").append("Landline: " + this_landlineRates.text() + "p /min<br />     Mobile: " + this_mobileRates.text() +"p /min");
    this_country = this_country.replace(/ /gi, "-");

    var flagoutput = "";
    var this_id = gup('id');

    if (this_id == "1") {
        flagoutput = "<img src='images/flag/" + this_country + ".png' style='float:right;     border:1px solid #CCC; margin-right:10px; ' />";
    } else {
        flagoutput = "<img src='images/flag/" + this_country + ".png' style='float:left; border:1px solid #CCC; ' />";
    }
    $("#flagoutput").html(flagoutput);
}

function parseXml_go(xml) {

    $(xml).find("db_rates").each(function() {
        var this_countryname = $(this).find("country").text();
        var this_id = $(this).find("id").text();
        var curOption = $("<option value='" + this_id + "'>" + this_countryname + "</option>")
        curOption.data("db_rates", $(this)); // bind the country node data from the XML to the     option of the dropdown
        $(curOption).appendTo($('#selCountry_go'))
    });

}

function onSelectChange_go() {
    var selected = $('#selCountry_go').children(':selected').data('db_rates');

    $('#rates_output_go').html("");
    var this_country = $(selected).find('country').text();

    //THOSE TWO VARIABLE ARE ALWAYS LOADED
    var this_landlineRates = $(selected).find('landline_rates');
    var this_mobileRates = $(selected).find('mobile_rates');



    // THOSE VARIABLES I WOULD LIKE TO ADD TO MY WEBSITE (DEPENDS ON HOW MANY OPERATORS ARE IN THE COUNTRY... SO IT CAN BE: this_mobileRatesC, D, E... 
    var this_mobileRatesA = $(selected).find('mobile_ratesA');
    var this_mobileRatesB = $(selected).find('mobile_ratesB');




    // AGAIN - THOSE TWO VARIABLES ARE ALWAYS LOADED
    $("#rates_output_go").append("<p class='dest_title'>" + this_country + "</p>");
    $("#rates_output_go").append("<ul><li><div class='dest_list'>Landline</div><div class='dest_list'>" + this_landlineRates.text() + "p /min</div><div class='clear'></div></li><li><div class='dest_list'>Mobile</div><div class='dest_list'>" + this_mobileRates.text() + "p /min</div><div class='clear'></div></li></ul>");


    // SO I WAS TRYING TO ADD MY CODE, BUT I THINK SOMETHING IS WRONG AS IT ALWAYS SHOWS VALUE EVEN IF THE VALUE IS 0 OR DOES NOT EXIST IN MY XML FILE (it will be more for this_mobileRatesB, C, D...)
    var this_mobileRatesA = $(selected).find('mobile_ratesA');
    if ('mobile_ratesA' >= "0") {
        $("#rates_output_go").append("<ul><li><div class='dest_list'>A</div><div class='dest_list'>" + this_mobileRatesA.text() + "p /min</div><div class='clear'></div></li></ul>");

        // for more added this_mobileRatesB
        var this_mobileRatesA = $(selected).find('mobile_ratesA');
        if ('mobile_ratesB' >= "0") {
            $("#rates_output_go").append("<ul><li><div class='dest_list'>A</div><div class='dest_list'>" + this_mobileRatesB.text() + "p /min</div><div class='clear'></div></li></ul>");



            this_country = this_country.replace(/ /gi, "-");

            var flagoutput = "";

            /* */
            var this_id = gup('id');

            if (this_id == "1") {
                flagoutput = "<img src='images/flag/" + this_country + ".png' style='float:right;     border:1px solid #CCC;margin-right:10px; ' />";
            } else {
                flagoutput = "<img src='images/flag/" + this_country + ".png' style='float:left; border:1px solid #CCC; ' />";
            }
            $("#flagoutput").html(flagoutput);
        }
    }
}

注意:コメントは、この投稿を明確にするためにのみ追加されました

XMLファイルpremier-rates.xml

<?xml version="1.0" encoding="utf-8" ?>
<Rates>
<db_rates>
<id>1</id>
<country>country1</country>
<landline_rates>0.10</landline_rates>
<mobile_rates>0.15</mobile_rates>
<mobile_ratesA>0.50</mobile_ratesA> // I WONT IF HAVE VALUE IS APPENDED
<mobile_ratesB></mobile_ratesB> // I WONT IF 0 OR EMPTY IS NOT APPENDED
</db_rates>
<db_rates>
... // MORE COUNTRIES
</db_rates>
...
</Rates>

問題を解決するのを手伝ってくれませんか。もっと良い方法があるかもしれないので、必ずしも私がこれをやろうとしていた方法ではありません。私はどんな助けとアドバイスにも感謝します。

どうもありがとう

4

2 に答える 2

0

これが私の目を引く最初のものです:

// SO I WAS TRYING TO ADD MY CODE, BUT I THINK SOMETHING IS WRONG AS IT ALWAYS SHOWS VALUE EVEN IF THE VALUE IS 0 OR DOES NOT EXIST IN MY XML FILE (it will be more for this_mobileRatesB, C, D...)
var this_mobileRatesA = $(selected).find('mobile_ratesA');
if ('mobile_ratesA' >="0"){
$("#rates_output_go").append("<ul><li><div class='dest_list'>A</div><div class='dest_list'>" + this_mobileRatesA.text() + "p /min</div><div class='clear'></div></li></ul>");

// for more added this_mobileRatesB
var this_mobileRatesA = $(selected).find('mobile_ratesA');
if ('mobile_ratesB' >="0"){
$("#rates_output_go").append("<ul><li><div class='dest_list'>A</div><div class='dest_list'>" + this_mobileRatesB.text() + "p /min</div><div class='clear'></div></li></ul>");

if ('mobile_ratesA' >="0")2つの定数文字列を比較しています。この結果は変更されないため、値は常に出力されます('mobile_ratesA' >= '0'文字列の比較によるため)。

私はあなたが欲しいものは

// only print if we find at least one mobileRatesA node
if(this_mobileRatesA.get().length > 0) {
    ...
}

多分

// only print if mobileRatesA contains a string
// representation of a number greater than 0
if(parseInt(this_mobileRatesA.text()) > 0) {
    ...
}
于 2012-08-06T22:21:56.627 に答える
0

あなたが求めていることの全体がわからないが、私が正しければ、あなたは条件付きXMLファイルを正しくプルすることを探しているだけですか?AKA 1つの条件が真のプルxmlファイルAを生成し、そうでない場合はxmlファイルBをプルしますか?

もしそうなら、あなたはこれを行うことができます:次のコードsnipetを変更します

$.ajax({
type: "GET",
url: "premier-rates.xml",
dataType: "xml",
success: parseXml   
});
// this is my XML file
$.ajax({
type: "GET",
url: "go-rates.xml",
dataType: "xml",
success: parseXml_go    
});

することが:

var file_data = {};
var download_xml_file_A = true; //This can be any type of conditional, just using an example
if(download_xml_file_A) {
    file_data.filename = "premier-rates.xml";
    file_data.callback = parseXml;
}
else {
    file_data.filename = "go-rates.xml";
    file_data.callback = parseXml_go;
}

$.ajax({
    type: "GET",
    url: file_data.filename,
    dataType: "xml",
    success: file_data.callback
    });

お役に立てれば!

于 2012-08-06T22:25:19.447 に答える