3

このユーザー名をPHPファイルに送信するjQueryスクリプトがあります。このスクリプトは、このユーザーが存在するかどうかを確認し、JSONユーザーオブジェクトを返します。IE以外のブラウザでは正常に動作しますが、IEは失敗します。

奇妙なことに、IEの「firebug」はすべてが正常であると言っていますが、PHPスクリプトは変数を受け取りません...

これはリクエストの本文です。

username = johanderowan&password = 1234

これらはリクエストヘッダーです(セキュリティ上の理由からいくつかの変数を省略しました):

Request = POST /1.0/account/login.json HTTP / 1.1
Accept = /
Origin = [DEVURL]
Accept-Language = nl-NL
UA-CPU = AMD64
Accept-Encoding = gzip、deflate
User-Agent = Mozilla / 5.0(互換性あり; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident / 5.0)
Host = [DEVURL]
Content-Length = 66
Connection Keep-Alive Cache-Control no-cache

応答の本文は次のとおりです(最初の3つの空の配列は$ _GET、$ _ POST、および$ _REQUESTです):

Array()
Array()
Array()
{"status": "error"、 "message": "ユーザー名またはパスワードが指定されていません。"、 "httpCode":500}

これはリクエストスクリプトです:

$('.mobyNowLoginForm form').bind('submit', function(){  
    var username = $(this).find('.username').val();  
    var password = $(this).find('.password').val();  
    $.post('[url]/1.0/account/login.json', {
        username: username,
        password: password
    }, function(response) {
        // do something
    }, "JSON");  
    return false;
});

ここで何が間違っているのかまったくわかりません...

4

2 に答える 2

1

IEはクロスドメインリクエストで正しいconent-typeを送信しないようです。content-typeは常に「text/plain」に設定されます。

このブログ投稿でこの欠点の詳細を読んでください:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

php:// input文字列を解析し、これを$ _POST varsとして設定することで、サーバーでこれを修正しました。

if ($_SERVER['REQUEST_METHOD'] == 'POST' && count($_POST) == 0) {
    $postData = file_get_contents('php://input');
    $postVars = explode('&', $postData);
    foreach ($postVars as $postVar) {
        list($key, $var) = explode('=', $postVar);
        $_POST[$key] = $var;
    }
}
于 2012-05-24T08:40:27.517 に答える
0

キャッシュをfalseに設定しようとしましたか。私は同様の問題を抱えていました、そしてこれはそれを修正しました:

$.ajax({
  type: 'POST',
  url: '[url]/1.0/account/login.json',
  dataType: 'json',
  data: {
      username: username,
      password: password
  },
  cache: false,
  success: function() {
      // Do something
  }
});

これがお役に立てば幸いです。

ステッフェン

編集

問題はリクエストURLにもある可能性があります。.jsonファイルを呼び出そうとしています。代わりに、.phpファイルを呼び出そうとすることができます。

これを.phpファイルに必ず入れてください。

header("Content-Type: application/json");
于 2012-05-23T14:01:03.477 に答える