0

データを受信し、Json 文字列をクライアントに返す MVC 4 アプリケーションがあります。このコードは、Chrome、Firefox、および IE で問題なく動作します (対象は 8+ のみですが、実際には IE7 で動作することを確認しました)。ただし、Windows の Safari 5.x では動作しません (Mac を持っていないため、テストできません)。

ここにjQueryがあります...(1.9.1を使用... thx Tim B Jamesの質問...以前に言及するのを忘れていました)

$.ajax({
        type: 'POST',
        url: '@Url.Content("~/Request/ValidateApprover/")',
        data: { 'name': input },
        success: function (json) {
          //do some work here
        },
        error: function () {
          //tell the user that it failed here
        }
      });

そして、これが呼び出されている私のコントローラーです...

[HttpPost]
public ActionResult ValidateApprover()
{
  string emailAddress = "";
  string name = this.Request.Form["name"]; //<--the form is blank using Safari 5

  if (String.IsNullOrEmpty(name) || String.IsNullOrWhiteSpace(name))
    return Json(new { result = "blank" }, "application/json", JsonRequestBehavior.AllowGet);

  //...keep going if you got a value other than blank

を使用してコントローラーで結果を読み取ろうとすると、this.Request.From["name"]Firefox、Chrome、および IE を使用する場合は問題ありませんが、Safari を使用すると空白のフォーム値が取得されます。

編集 1: Safari でデータが適切に渡されているかどうかを確認するために、非常に単純な PHP ページを作成しました。どうやら... IIS と Safari の間の何かが問題のようです。

編集 2:テストする非常に単純な MVC アプリケーションを作成しましたが、そのテストでデータが表示されます....これは、Safari での HTML 検証のようなものだと思います。この編集では、投稿されたリクエスト ヘッダー データも削除しました。

追加のアイデアはありますか?

4

3 に答える 3

0

問題は Safari の Kerberos 認証の処理にありますが、私は解決策を見つけました。

http://forums.iis.net/t/1182376.aspx/1

IIS のそのスレッドは、Negotiate(つまりKerberos) 認証が Safari で不適切に処理されることを説明しています。Negotiateプロバイダーとして無効にする必要があります。

IIS (私は IIS 7.5 を使用しています) で、サイトをクリックし、Authentication(ダブルクリック) → Windows Authentication(シングルクリック) → Providers(右側) →Remove Negotiate and leave NTLM

これにより、Safari に関するすべての問題が解決されました。

于 2013-04-10T12:46:21.423 に答える
0

それは私にとってもうまくいきます..私はIIS 6.0を使用しています。

管理者として「コマンドプロンプト」を実行してから

cd c:\inetPub

Cd adminScripts

cscript adsutil.vbs get w3svc/NTAuthenticationProviders

cscript adsutil.vbs set w3svc/NTAuthenticationProviders "NTLM"

IIS を再起動します。

于 2013-10-18T06:56:30.633 に答える
0

これは私が使用するものです:

関数 setContent(コンテンツファイル) {

if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function(){
    if (xmlhttp.readyState==4  && xmlhttp.status==200 ){
        //alert(xmlhttp.responseText);
      $('#*******').html(xmlhttp.responseText);
    }
}
xmlhttp.open("GET",contentfile,true);
xmlhttp.send();

}

すべてのブラウザで動作します。

于 2013-03-20T15:55:18.310 に答える