jQuery的阿贾克斯ASP.NET .ASCX控制
我正在使用jQuery在代码中的.ascx控件的方法的AJAX调用后面获取业务对象的列表:jQuery的阿贾克斯ASP.NET .ASCX控制
C#代码:
if (Request.Headers["X-OFFICIAL-REQUEST"] == "TRUE") ReturnList(Request.Params[1]);
protected void ReturnList(string param)
{
Response.Write(GetBusinesses(param));
Response.Flush();
try {
Response.Close();
}
catch { }
Response.End();
return;
}
private string GetBusinesses(string classificationName)
{
System.Web.Script.Serialization.JavaScriptSerializer jSearializer = null;
if (!string.IsNullOrEmpty(classificationName))
{
dSourse = BusinessesDBService.Instance.GetLatestListingsUpdates(classificationName).ToList();
jSearializer = new System.Web.Script.Serialization.JavaScriptSerializer();
}
return jSearializer.Serialize(dSourse);
}
jQuery代码:
window.jQuery.ajax({
type: "POST",
async: false,
url: location.href,
dataType: "json",
data: ({ 'FUNCTION': 'ReturnList', 'param0': classificationName.toLowerCase() }),
success: function (data) {
data = eval(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
beforeSend: function (xhr) {
xhr.setRequestHeader("X-OFFICIAL-REQUEST", "TRUE"); //Used to ID as a AJAX Request
},
complete: function (XMLHttpRequest, textStatus) {
//build HTML
var tablestring = '<table ><tr><td>UsreID" + "</td><td>UserName</td></tr>';
for (var i = 0, len = data.length; i < len; ++i) {
tablestring = tablestring + "<tr>";
tablestring = tablestring + "<td>" +
data[i].BusinessID + "</td>";
tablestring = tablestring + "<td>" +
data[i].BusinessName + "</td>";
tablestring = tablestring + "</tr>";
}
tablestring = tablestring + "</table>";
var divResult = document.getElementById("divAjax");
divResult.innerHTML = tablestring;
}
});
HTTP调用执行罚款和收集是斯里alize并返回响应,但我在这里有一些问题。主要的是没有创建HTML - 我无法捕获返回的字符串。下面的字符串在呼叫完成后显示在Firebug脚本窗口中
[{“BusinessID”:6549,“BusinessName”:“Ivory Store”,“IsMain”:true},{“BusinessID”:16565, “BusinessName”:“Classic Nails”,“IsMain”},{“BusinessID”:5877,“BusinessName”:“Visible Changes Hair”,“IsMain”:true}]
同样在Firebug中, XMLHttpRequest响应对象中的字符串和错误消息是“JSON无效”任何suggetions?非常感谢你。
出于某种原因,下面的代码隐藏的C#解析器代码没有将“]”附加到字符串的末尾,所以我不得不手动追加它 - 它的工作!谢谢。
public static string Serialize<T>(T obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
string retVal = Encoding.UTF8.GetString(ms.ToArray());
return retVal + "]";
}
尝试“冲洗” MemoryStream。如果它实际上并没有附加尾部']',这将是框架中的一个重大缺陷,并且其他几个人也会遇到类似的问题。 – 2012-03-26 18:33:41
无效JSON
[{"BusinessID":6549,"BusinessName":"Ivory Store","IsMain":true}, {"BusinessID":16565,"BusinessName":"Classic Nails","IsMain"},{"BusinessID":5877,"BusinessName":"Visible Changes Hair","IsMain":true}]
看到在中间的 “IsMain” 可能需要或者
[{"BusinessID":6549,"BusinessName":"Ivory Store","IsMain":true}, {"BusinessID":16565,"BusinessName":"Classic Nails","IsMain":true},{"BusinessID":5877,"BusinessName":"Visible Changes Hair","IsMain":true}]
OR
[{"BusinessID":6549,"BusinessName":"Ivory Store","IsMain":true}, {"BusinessID":16565,"BusinessName":"Classic Nails","IsMain":false},{"BusinessID":5877,"BusinessName":"Visible Changes Hair","IsMain":true}]
看到这个页面的缺失部分:点击JSLint的按钮:http://jsfiddle.net/QmMdC/
我的不好,IsMain上的“缺失部分”没问题,当截断实际的JSON时,我失去了“真正的”部分 - 约30个字段。我明天会发布整个对象的JSON。谢谢。 – itisinteresting 2012-03-22 22:41:51
出于某种原因,下面的代码隐藏C#解析器代码没有将“]”追加到字符串的末尾,所以我不得不手动追加它 - 它的工作!谢谢。公共静态字符串序列化
是的,我看到你的C#代码,它是definatly不是我做的方式,在上课,让框架处理序列的该类似乎是做这个的方式.. – 2012-03-27 11:42:57
如果你有无效的JSON麻烦,无法找到问题,我建议你使用像[JSONLint]一个验证器(http://jsonlint.com/)。 – 2012-03-22 21:14:13