0

到目前为止,我了解到,客户端 AJAX 脚本可以从服务器读取静态.json 或 .xml 文件,例如http://www.mydomain.com/all_cities.xml

但我需要根据客户端的用户输入动态生成 .json 或 .xml 文件。例如,假设用户从 DropDownList1 中选择了一个州,AJAX 应该用该州的城市填充 DropDownList2;而我不喜欢发送所有城市,然后在客户端过滤所需的城市!

所以,我想知道 ASP.NET 如何处理这个问题,例如,当它看到“http://www.mydomain.com/cities.json?state=9”时,它应该以动态创建的名为 citys 的 json 文件进行响应。 json 其中包含状态#9 的城市?

提前致谢!

4

4 回答 4

1

有很多方法可以做到这一点 - 基本上,最简单的方法是让任何标准网页(无论是表单、MVC 控制器/动作/等),其行为就像任何普通网页一样,具有用户输入,但不是返回 html,它返回 XML。(通过返回 XML,我的意思是使页面的内容完全是 XML 并添加适当的标题)

您的问题过于宽泛,无法提供更多细节 - 但简单地说,它很容易完成,客户端(在这种情况下为 JavaScript)通常无法区分。

于 2012-05-08T17:33:23.713 回答
0

如果要创建 WCF 服务,可以有一个 WebGet,它接受州作为参数并返回该州的城市:

[WebGet(UriTemplate = "cities/{state}")]
public List<string> GetCities(string state)
{
    List<string> citiesFromState;
    // Build up a List of cities based on the state sent
    return citiesFromState;
}

在您的应用程序的 web.config 中,设置automaticFormatSelectionEnabled为 true 以便 WCF 将查看 HTTP 请求的“接受”标头以确定发送响应的格式(例如 xml 或 json):

<behavior name="webHttpBehavior">
    <webHttp automaticFormatSelectionEnabled="true" helpEnabled="true"/>
</behavior>

这允许 WCF 为您处理序列化。否则,您可以在WebGet.

于 2012-05-08T17:29:46.880 回答
0

实现这一目标的方法之一是

在客户端:使用 jQuery 并调用方法/服务以返回 JSON。就像是

function CallService() {
    $.ajax({
        type: "GET", //HTTP verb
        url: serviceUrl,
        data: "{}", //Data sent to server
        contentType: "application/json; charset=utf-8", // content type sent to server
        dataType: "json", //Expected data format from server e.g. json, xml etc.
        success: OnSuccess
    });
}

function OnSuccess(data) {
    var options = $(".InputDropDown"); //.InputDropDown is class assigned to dropdown
    //don't forget error handling! 
    $.each(data, function (index) {
        var item = data[index];
        options.append($("<option />").val(item.Id).text(item.Name));
    });
}

此方法将在第一次下拉更改时调用

在服务器端:使用返回 JSON 的 Web 服务(或 WCF)方法或页面方法(在您的 Web 应用程序中)。

    [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Countries")]
    List<Country> GetCountries();

如果您不熟悉 jQuery 等。我强烈建议您阅读此内容。

可以在LINK-1LINK-2中找到使用 PageMethod 和纯 JavaScript 的替代方法(没有 WCF)的示例

于 2012-05-08T17:51:44.690 回答
0

如果要读取静态内容,默认情况下只能使用 .XML,因为 .JSON 不是 IIS 支持的默认 MIME-TYPE。这是一个关于如何使用 jQuery 的 ajax() 方法将静态 XML 文件读入页面的示例。

静态文件“cities.xml”。

<?xml version="1.0" encoding="utf-8" ?>
<cities>
    <city>City A</city>
    <city>City B</city>
    <city>City C</city>
</cities>

用于读取静态 XML 并解析为 JavaScript 数组的 jQuery 代码。

$.ajax({
    url: 'cities.xml',
    dataType: 'xml',
    success: function (xml)
    {
        var cities = [];

        $(xml).find('city').each(function ()
        {
            cities[cities.length] = $(this).text();
        });

        // Do something with your array of values here.
    }
});
于 2012-05-08T18:02:58.180 回答