0

次の Jquery コードに問題があります。

function isAuthorised() {
  $.post("Action/Controller")', function (data) {
    return data;
  });
}

MVCコントローラーからの戻り値をテストしましたが、問題ありません。しかし、次のように承認を確認すると:

function onLoad() {
  var result = isAuthorised();
  alert(result); // undefined
  if (!result) 
    // redirect
}

戻り値は未定義です。ここで同様の投稿を見て、これは の問題かもしれないと思いますencapsulationが、違いは から取得した値を返す必要があることですJQuery.post()

編集:わかりました、コールバック内でリダイレクトを行いたくないので、.Ajax を使用して Async を false に設定して値を返そうとしています。私は今[Object object]、以下のコードで戻っています。誰かが違いを説明できますか? async を false に設定し、値を返すのを手伝ってくれますか?

var request = $.ajax({
        url: 'Action/Controller',
        type: 'post',
        async: false
      });

      var result = request.done(function (data) {
        return data;
      });
      alert(result); // [Object object]
4

2 に答える 2

1

dataTypejQuery ajax 呼び出しのパラメーターを確認する必要があります。必要な戻り値によっては、dataType (xml、json、text など) を明示的に設定することをお勧めします。

json を返す場合は、JavaScript オブジェクトに変換されます。あなたの警告から、私はそれが事実であると推測しています。

文字列を取得するには、この mod を試してください。

var request = $.ajax({
    url: 'Action/Controller',
    type: 'post',
    dataType: 'text',
    async: false
});

alert(request.responseText); // [now it will be outputted as text]

同期では ajax 呼び出しrequestはオブジェクトになるように入力されるため、そのプロパティの 1 つを使用してデータを抽出する必要があります。

于 2013-02-01T08:26:45.470 に答える
0

そこから戻ることはできません。ajaxを使用すると、コードを別の方法で構造化する必要があります。IEを使用すると、コールバックでリダイレクトできます。

function isAuthorised() {
  $.post("Action/Controller", function (data) {
    if (!data) {
        //redirect
    }
  });
}

とにかく、javascriptで認証をチェックすることは私には意味がありません、あなたはページサーバーサイドにサービスを提供する前にそれをするべきです

于 2013-01-31T13:23:15.227 に答える