【发布时间】:2012-02-27 17:14:50
【问题描述】:
我正在尝试创建一个简单的 AJAX 和 Web 服务测试(使用 C# .Net 2.0)以返回 JSON 格式的数据,我拥有(我相信)我需要的一切,但我一直遇到同样的问题再次。来自 Web 服务的响应始终是 XML。 (它总是以<?xml version="1.0" encoding="utf-8"?> 作为第一行)。
我尝试了 ScriptMethod 标记中的各种选项,但没有任何区别。
调用工作正常,但我得到一个带有响应的“解析器错误”,这是我所期望的,因为它不是有效的 JSON。我可以在浏览器中调用 Web 服务方法并获得我期望的返回值,只是 XML 格式。 Fiddler 还显示请求和响应与我发现的一样。
这里已经有几个关于完全相同的问题的问题,但没有一个给我一个有效的答案。
如果您需要更多信息,请提出问题。
C#
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;
namespace jQueryWebServiceTest
{
/// <summary>
/// This is a simple web service to test calling from javascript using AJAX, and getting a response.
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SayHello()
{
// I've tried both this...
var response = new { value = "Hello" };
JavaScriptSerializer json = new JavaScriptSerializer();
return json.Serialize(response);
// and this...
return "Hello";
}
}
}
Javascript
$(function () {
var data = JSON.stringify({ Name: "John" }); // This is not used - part of other testing.
data = "{}";
$.ajax({
type: "POST",
data: data,
url: "TestService.asmx/SayHello",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log(data);
},
error: function (error, status) {
console.log("status = " + status);
console.log(error);
}
});
});
【问题讨论】:
-
谢谢加里。我已经看过那个了,但是因为我使用的是.Net 2.0,所以它不相关(我会修改问题以反映这一点)。还是谢谢你。
-
@Archer 实际上你必须使用.Net 3.5。直到那个版本才引入 ScriptMethod 属性。
-
@JamieSee 你可以在 .Net 2 中使用 AJAX 扩展(我认为实际上是 .Net 1),只要你有对相关库的引用(我有或它不会)编译或运行。)谢谢。
-
也许这是 AJAX 扩展的问题?如果您在不使用旧扩展库的情况下将其作为 3.5 进行尝试,它会起作用吗?另外,我发现了一个可能有帮助的线程:forums.asp.net/t/1054378.aspx
标签: c# jquery ajax web-services asmx