我正在尝试将来自jquery $ .ajax方法的请求发送到我在其他域上创建的.net Web服务。我已经尝试了很多东西,但我仍然无法将其付诸实践。我不断得到的回应是未定义的。
有人可以提出建议吗?
由于
.NET代码
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string callback = "";
try
{
if (!string.IsNullOrEmpty(context.Request["callback"]))
{
if (!string.IsNullOrEmpty(context.Request["var1"]))
SaveData(context.Request["var1"]);
callback = context.Request["callback"];
var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(JSON);
HttpContext.Current.Response.ContentType = "application/json";
string qs = HttpContext.Current.Request.QueryString["callback"];
HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")");
}
}
catch (Exception exc)
{
context.Response.Write(callback +
"({ \"return\": \"" + exc.Message + "\" })");
}
}
JQUERY
$.ajax({
url: "URL",
dataType: "jsonp",
success: function(data){
alert(data); // Always Undefined
}
});
答案 0 :(得分:1)
您将在此处返回损坏的JSON:
HttpContext.Current.Response.Write(callback+"(\"Clients : \"" + sJSON+ ")");
您是否注意到\"
之后的Clients:
?你应该把它放在:
之前。所以你的JSON看起来像这样(如果你使用了一个javascript调试工具,比如FireBug,你会立即注意到,因为FireBug会把这个错误写入你的控制台):
callback("Clients : "[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}])
看到问题?
从不硬编码JSON。 从不使用字符串连接来构建JSON。 <强>从不强>
始终在构建或解析JSON时使用JSON序列化程序。
就像那样:
string sJSON = oSerializer.Serialize(new { Clients = JSON });
context.Response.ContentType = "application/json";
context.Response.Write(string.Format("{0}({1})", callback, sJSON));
在这个例子中,我将一个匿名类型new { Clients = JSON }
传递给JSON序列化程序,它将产生正确有效的输出:
callback("Clients":[{"ID":1,"Name":"client 1"},{"ID":2,"Name":"client 2"},{"ID":3,"Name":"client 3"}])