4

私は次の間の正確な違いを知る必要があります:

<form method="POST" action="https://mywebsite/signon.php">
<input name="harv_acc" value="940322903" type="hidden" />
<input name="harv_eml" value="a@b.com" type="hidden" />
<input type="submit" value="SignOn" />

var url = "https://mywebsite/signon.php";
$.ajax({
    url: url,
    type: 'POST',
    //dataType: 'html', -- this was something I tried later
    //data: "harv_acc=" + accountnumber + "&harv_eml=" + email , this is also what I tried last but below is what I tried first
    data: { harv_acc: account, harv_eml: email },
    success: function (data) {
        closePopup("div_PleaseWait");
        alert(data);
        //window.location = encodeURI('<%= Url.Action("DownloadDocument", "Documents") %>?DocumentID=' + documentID + '&DownloadType=' + downloadType + '&DownloadPath=' + data);
    }
});

後者を投稿すると、200が返されますが、応答がありません。最初のものを提出すると、正しい回答が得られます。

4

5 に答える 5

14

From the comments:

I'm posting to another site

Aha! There's your issue. Browsers block AJAX to external websites for security reasons. Sorry, but you're not going to issue that request via an XHR request.

If the other website wants you to communicate with them, they could expose this part of the site via JSON-P, which works something like this:

  1. My site adds <script src="http://othersite.com/signon.js?username=foo&password=bar&callback=myCallback"> to the source code (yeah, it's messy to use GET for this, but JSON-P can't work any other way), and creates a function named myCallback to handle the response data.
  2. The other site signs in, then returns something like myCallback({success: false, errorMessage: "Incorrect password, try again!"})
  3. That script is run on my site, calls myCallback, and everything is happy.

JSON-P is a powerful protocol, but only works if the remote site agrees to it. Still, if they do, jQuery has a nice shortcut for it: just set dataType: "jsonp" and it will handle the whole callback thing for you.

But if you're not closely involved with this website, that's unlikely to happen, and you'll probably just be stuck with having to give up on this kind of cross-site interaction. Sorry, but this kind of cross-domain policy is critical to online security. (I don't want other sites issuing requests to bankofamerica.com on my behalf, kthx.)

于 2012-06-29T15:24:44.760 に答える
1

complete関数に渡される最初のパラメーターjqXHRは、ブラウザーのオブジェクトのラッパーであるオブジェクトになりXMLHttpRequestます。応答を処理するより便利な方法は、次のdoneメソッドを使用することです。

var url = "https://mywebsite/signon.php";
$.ajax({
    url: url,
    type: 'POST',
    dataType: 'html',
    data: "harv_acc=" + accountnumber + "&harv_eml=" + email
}).done(function(data) {
    closePopup("div_PleaseWait");
    alert(data);
});
于 2012-06-29T15:26:21.170 に答える
0

それらのデータを key:value オブジェクトとして送信してみてください。これは jQuery ドキュメントの例です

    $.ajax({
  type: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

更新: ユーザー Matchu が指摘したように、jQuery ドキュメントに記載されているように、データはとにかくクエリ文字列に変換されるため、これは問題ではありません。

「データ オプションには、key1=value1&key2=value2 の形式のクエリ文字列、または {key1: 'value1', key2: 'value2'} の形式のマップのいずれかを含めることができます。後者の形式が使用される場合、データは変換されます。送信前に jQuery.param() を使用してクエリ文字列に変換します。"

ええ、私の側でいくつかの無謀な答えがあります。少なくともは何かを学びました!;)

于 2012-06-29T15:22:27.557 に答える
0

クロスドメインの ajax リクエストはブラウザーでサポートされていません。しかし、これを回避する別の方法があります。

クロスドメイン リクエストにJSONPを使用できます。使い方は簡単で、コールバックをサポートする任意のサーバー/スクリプトから (JSON 形式である限り) 何でも要求できます。JSONP の良いところは、古いブラウザーでも動作することです。

唯一の深刻な制限は、常に HTTP GET メソッドを使用することです。

こちらも併せてご確認いただけますでしょうか。

于 2012-06-29T15:32:47.463 に答える
-2

POST メソッドを使用する場合は、データを JSON として投稿する必要があります。

var url = "https://mywebsite/signon.php";
$.ajax({
    url: url,
    type: 'POST',
    dataType: 'html',
    data: {
      harv_acc : accountnumber,
      harv_eml : email
    },
    success: function (data) {
        closePopup("div_PleaseWait");
        alert(data);
        //window.location = encodeURI('<%= Url.Action("DownloadDocument", "Documents") %>?DocumentID=' + documentID + '&DownloadType=' + downloadType + '&DownloadPath=' + data);
    }
});

注:私は dataType を使用しました:JSON

于 2012-06-29T15:21:04.230 に答える