【问题标题】:jQuery running C# methodjQuery运行C#方法
【发布时间】:2014-12-06 17:21:41
【问题描述】:

谁能指出我正确的方向?

我正在尝试通过 Javascript/jQuery 从 C# 方法获取输出。

返回的输出是[object Object],它应该返回首都。

jQuery(使用 jqvmaps 工具):

$(document).ready(function () {



    var Capital = null;

    jQuery('#vmap').vectorMap(
{

    map: 'world_en',
    backgroundColor: '#a5bfdd',
    borderColor: 'white',
    borderOpacity: 0.25,
    borderWidth: 1,
    color: 'gray',
    enableZoom: true,
    hoverColor: 'orange',
    hoverOpacity: null,
    normalizeFunction: 'linear',
    scaleColors: ['#b6d6ff', '#005ace'],
    selectedColor: 'red',
    selectedRegion: null,
    showTooltip: true,
    onRegionClick: function (element, code, region) {

        var codeValue = $('#Code').text();
        var countryCode = $('#Code').text();

        var data = null;
        data = { CountryCode: codeValue.toUpperCase() }


        console.log(data);


        $.ajax({
            type: "POST",
            url: 'Default.aspx/GetCapital',
            data: JSON.stringify(data),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (code) {

                Capital = code.d;

                CapitalCity.text(Capital);

            }
        });

        var ISOCode = $('#Code');

        ISOCode.text(code);

        var Country = $('#Country');

        Country.text(region);


        var CapitalCity = $('#Capital');




    }
});



    });

C#:

using System;
using System.Collections.Generic;
using System.Web.UI;
using Newtonsoft.Json;
using System.IO;
using System.Web.Services;
using System.Web.Script.Services;

namespace WorldMapDetails
{
    public partial class _Default : Page
    {



        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {

            }
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static string GetCapital(string CountryCode)
        {
            //do your stuff
            Country Country = new Country();

            List<Country> selectedCountry = JsonConvert.DeserializeObject<List<Country>>(File.ReadAllText(@"C:\Users\Brian\Documents\Bloxinations\Bloxinations\WorldMapInfo\WorldMapDetails\Scripts\json\Countries.json"));

            String Capital = null;

            foreach (Country c in selectedCountry)
            {
                if (c.cca2 == CountryCode)
                {
                    Capital = c.capital.ToString().ToUpper();
                }
            }

            return Capital;
        }
    }
}

如果我运行这个 jQuery,它可以正常工作,但是首都文本的更改是“延迟的”(我必须双击一个区域)。

$(document).ready(function () {

    var Capital = $('#Capital');

    jQuery('#vmap').vectorMap(
    {

        map: 'world_en',
        backgroundColor: '#a5bfdd',
        borderColor: 'white',
        borderOpacity: 0.25,
        borderWidth: 1,
        color: 'gray',
        enableZoom: true,
        hoverColor: 'orange',
        hoverOpacity: null,
        normalizeFunction: 'linear',
        scaleColors: ['#b6d6ff', '#005ace'],
        selectedColor: 'red',
        selectedRegion: null,
        showTooltip: true,
        onRegionClick: function (element, code, region)
        {

            var codeValue = $('#Code').text();
            var countryCode = $('#Code').text();
            var data = { CountryCode:codeValue.toUpperCase() }

            var ISOCode = $('#Code');

            ISOCode.text(code);

            var Country = $('#Country');

            Country.text(region);



            $.ajax({
                type: "POST",
                url: 'Default.aspx/GetCapital',
                data: JSON.stringify(data),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (code) {

                    Capital.text(code.d);
                    //console.log(data);
                    console.log(code);

                }
            });

        }



    });


});

如何修复它以使其立即更新(无需双击)?

【问题讨论】:

    标签: javascript c# jquery json webmethod


    【解决方案1】:

    修复将 ajax 结果分配给Capital 变量的问题,如下所示。

        $(document).ready(function () {
    
        var Capital = null;
    
        jQuery('#vmap').vectorMap(
    {
    
        map: 'world_en',
        backgroundColor: '#a5bfdd',
        borderColor: 'white',
        borderOpacity: 0.25,
        borderWidth: 1,
        color: 'gray',
        enableZoom: true,
        hoverColor: 'orange',
        hoverOpacity: null,
        normalizeFunction: 'linear',
        scaleColors: ['#b6d6ff', '#005ace'],
        selectedColor: 'red',
        selectedRegion: null,
        showTooltip: true,
        onRegionClick: function (element, code, region) {
    
            var codeValue = $('#Code').text();
            var countryCode = $('#Code').text();
    
            var data = null;
            data = { CountryCode: codeValue.toUpperCase() }
    
            console.log(data);
            var Capital = null;
    
            $.ajax({
                type: "POST",
                url: 'Default.aspx/GetCapital',
                data: JSON.stringify(data),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (code) {
                    Capital = code;
                    $('#Capital').text(Capital);
                }
            });
    
            var ISOCode = $('#Code');
    
            ISOCode.text(code);
    
            var Country = $('#Country');
    
            Country.text(region);
        }
    });
    
    
    
        });
    

    【讨论】:

    • 还是同样的问题。需要双击。
    • 我的意思是你需要在你更新 CapitalCity.text(Capital) 的第一组 JS 中应用我的修复。
    • 是的,我明白了。还是同样的错误。请参阅更新的代码(第一部分)。
    • 还是不对 CapitalCity.text(Capital);无法工作,因为尚未创建 CapitalCity 元素变量以及为什么 code.d 我可以看到您从服务调用发送字符串,请参阅我更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多