zoukankan      html  css  js  c++  java
  • asp.net :使用jquery 的ajax +WebService+json 实现无刷新去后台值

    首先贴上Jquery的ajax:

    代码
    $.ajax({
    url:
    'ws_Ajax.asmx/BindDictByUpper',
    type:
    'POST',

    contentType:
    'application/json;charset=utf-8',
    dataType:
    'json',
    data:
    '{ PpareId:"' + varlue + '"}',
    success: function (data) {
    var dataObj
    = eval("(" + data + ")");
    // $('#myList').html('');
    // for (var i = 0; i < msg.d.length; i++) {
    // $('#myList').append('<li>' + msg.d[i] + '</li>');
    // }
    alert(dataObj);
    $.each({ name:
    "John", lang: "JS" }, function (i, n) {
    alert(
    "Name: " + i + ", Value: " + n);
    });

    $.each(dataObj, function (idx, item) {
    if (idx == 0) {
    return true; //同countinue,返回false同break
    }
    alert(
    "name:" + item['name'] + ",value:" + item['value']);
    });

    },

    //data: '{query:"' + $('#editQuery').val() + '"}',
    processData: false
    });

    好,前台写好,建一个webservice页,写上方法:

    代码
    /// <summary>
    /// Datatable转换为Json
    /// </summary>
    /// <param name="table">Datatable对象</param>
    /// <returns>Json字符串</returns>
       //然后在webservice中需要返回json数据的方法加上如下属性
      [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
    public static string ToJson(DataTable Adt)
    {
    StringBuilder jsonString
    = new StringBuilder();
    jsonString.Append(
    "[");
    foreach (DataRow pdr in Adt.Rows)
    {
    jsonString.Append(
    "{");
    jsonString.AppendFormat(
    "name:\"{0}\",value:\"{1}\"", pdr["字典内容"].ToString(), pdr["序号"].ToString());
    jsonString.Append(
    "},");
    // jsonString.AppendFormat("{name:'{0}',value:'{1}'},", pdr["字典内容"].ToString(), pdr["序号"].ToString());
    }
    jsonString.Remove(jsonString.Length
    - 1, 1);
    jsonString.Append(
    "]");
    return jsonString.ToString();
    }

     ScriptMethod在 using System.Web.Script.Services 命名空间下,这里还可以设置是否使用 get方式来调用 UseHttpGet=true

    然后尝试着运行,这是出问题列,无论怎样运行都不能调到后台方法:

    最后在网上查列好久

    才发现在新建的webservice页少了一句关键的话:

    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    [System.Web.Script.Services.ScriptService]

    在类前面加上这句话就可以了

    加上以后再运行,好,可以调到后台了

    后台的数据也发送到前台

    但又出现问题列,发过来的数据不能以解析出来json数据

    按网上说的,只要把ajax中的dataType设置为json就行了,但是实际上不行,然后在网上查了下:

    1、对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次 

    2.对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法

    但是我把他的dataType设置为json,应该直接可以用le?

    于是我把传回来的数据放在eval()方法里面处理了下,再调用就可以le?

    这样前台调出来的数据就可以直接按你需要的方式处理了。

    我这里还又一个疑问:

    我用这种方式取数为什么查不出来数据(我对json不是很熟,第一次用):

    $.each(data.root,function(idx,item){
    if(idx==0){
    return true;//同countinue,返回false同break
    }
    alert(
    "name:"+item.name+",value:"+item.value);
    });
    });

    网上看的这样方式页可以调用json数据,知道的给解答下……

    Top
    收藏
    关注
    评论
  • 相关阅读:
    Poj 1973 Software Company(二分+并行DP)
    Bellman-Ford算法及其队列优化(SPFA)
    Java程序打包成exe可执行文件
    zabbix监控入门初步
    网页解析器
    urllib2下载网页的三种方法
    ubuntu14.04允许root远程链接、修改主机名
    Iptalbes练习题(三)
    Iptalbes练习题(二)
    htop的使用
  • 原文地址:https://www.cnblogs.com/smiler/p/1830346.html
Copyright © 2011-2022 走看看