Я пытаюсь создать простой тест AJAX и веб-службы (используя C # .Net 2.0) для возврата данных в формате JSON, и у меня есть (я считаю) все, что мне нужно, но я продолжаю сталкиваться с той же проблемой иснова.Ответ от веб-службы всегда XML.(В первой строке всегда указывается <?xml version="1.0" encoding="utf-8"?>
).
Я пробовал различные варианты, которые входят в тэг ScriptMethod, но ничего не имеет значения.
Вызов работает нормально,но я получаю "parsererror" с ответом, который я ожидаю, так как он не является допустимым JSON.Я могу вызвать метод веб-службы в браузере и получить ожидаемое возвращаемое значение только в формате 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);
}
});
});