3

標準のフォーム送信アクションでSalesforceに送信しているフォームがあります。デフォルトでは、POSTの完了後に特定のURLにリダイレクトするようにSalesforceに指示できます。

フォームページに他のアクティビティがあるため、リダイレクトされたくありません。問題ありません。私のページはすでにjQueryを使用しているので、次のような便利な$.ajaxユーティリティを使用できます。

$('#wrapper').on('click', '#formsubmit', function(e) {
    e.preventDefault();

    var formData = $('#subForm').serialize();
    $.ajax({
      type: "POST",
      url: "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8",
      data: formData,
      success: function() {
        console.log('success!'); // or not!
      },
      error:function (xhr, ajaxOptions, thrownError){
                    console.log(xhr.status); // 0
                    console.log(thrownError); // empty
                }
    });
});

私の見当違いの頭脳では、Salesforceが私の古き良きリダイレクトを返すことを想像しました。これは、私が単に破棄/無視できる「成功」としてカウントされます。確かに見当違い!

  • 200 OKの結果(通常は「成功」を意味します)が表示されますが、成功のコールバックは作動しません。
  • リードSalesforceデータベースに追加されます
  • 返されたものの内容を検査すると、ゼロが表示されます。応答に内容はありません。
  • エラーコールバックトリップされていますが(200 OKにもかかわらず)、意図的にリダイレクトされなかったことが原因で、「リソースが利用できません」と見なされますか?(したがって、私のステータスコードは0であり、throwdErrorにコンテンツはありませんか?)

コールバックで追加のアクションをトリガーできるように、これを成功したPOSTとして識別するためのアドバイスはありますか?応答を完全に無視したくない、または失敗したPOSTを成功したかのように処理しているシナリオになってしまう可能性があります。どういうわけか成功を捉える必要があります。

クロスサイトスクリプティングの問題である可能性もありますが、アプリケーションはJSONPでデータを交換しないため、それを回避する方法がわかりません(また、それを特定する方法もわかりません)。そもそも)。

4

2 に答える 2

3

ここでいくつかのこと:

1) Salesforce の API によって送信されるリダイレクト応答は、エラー コードとして解釈される可能性が最も高いです。

2) 次のページ (リダイレクト後) の応答コードは、音から 200 OK です。

3) JSONP を使用して POST リクエストを実行することはできません。これは JSONP の制限です。これは実際には AJAX リクエストではなく、動的に生成されたスクリプトタグ内にラップされた HTTP GET リクエストです。また、JSONP は、リクエストが 200 OK の HTTP レスポンスを返す場合にのみ機能します。

AJAX POST リクエストを処理するには、独自のサーバー側の仲介者を使用することをお勧めします。これは、フロントエンド アプリと Salesforce の API の間のプロキシとして機能します。これにより、アプリに送信される応答をより適切に制御することもできます。

于 2012-05-14T21:43:38.770 に答える
0
var formData = $('#subForm').serialize();
   var response = $.ajax({
      type: "POST",
      url: "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8",
      data: formData,
      success: function() {
        console.log('success!'); // or not!
      },
      error:function (xhr, ajaxOptions, thrownError){
                    console.log(xhr.status); // 0
                    console.log(thrownError); // empty
                }
    }).responseText;

ここで、varresponseにはajax呼び出しからの戻り値が含まれます

于 2012-05-14T21:39:42.780 に答える