1

ASMX 通話が戻ってくるContent-Type = text/xml; charset=utf-8

ASP.NET 3.5 とjQuery.Ajax.
これらのことは、スタックオーバーフローからの多数の提案に従って追加されました

私はこれらのことをしました

  1. web.configでこれを行いました

    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false"
    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    
  2. ASMX内の関数呼び出しでは、これらを使用しています

    <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
    Public Function GetCompanies(SearchedCompany As String) As String
    
  3. jQuery Ajax呼び出しは次のようになります

    var searchString = "SearchedCompany=" + $(".auto-company").val();
    $.ajax({
        type: "POST",
        url: "Services/CompaniesService.asmx/GetCompanies",
        data: searchString,
        dataType: 'json',
        success: function (msg) {
            companies = msg.hasOwnProperty("d") ? msg.d : msg;
        },
        error: function (xhr, status, error) {
    
        }
    });
    

しかし、私が何をしても、応答ヘッダーはまだ xml 型です。ここで欠けているのはどの部分ですか?

免責事項: 私はこれがここで何度も尋ねられたことを知っています. しかし、答えを見つけることができませんでした。ご覧のとおり、提供されているすべてのソリューションを既に実装しています。

4

1 に答える 1

6

contentType も「application/json; charset=utf-8」に設定する必要があります。

http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/

jQuery はデータを含む POST 要求で content-type を設定するため、最初は content-type がデフォルトの「application/x-www-form-urlencoded」に設定されます。その後、IE7 では、setRequestHeader に「application/json;」が追加されました。charset=utf-8″ を実際に設定するのではなく、それに設定します。そのため、JSON シリアライゼーションの content-type が正しくなく、Web サービスが JSON ではなく XML を返していました。

于 2011-12-29T13:57:28.833 に答える