0

jQuery ajaxPrefilter を次の JS コードで動作させようとしています。ajax 関数を呼び出すために使用するコードを次に示します。

var $setallow = $(".show");
$setallow.click(function() {
    var $allow = $(this).closest("form");
    var formData = $allow.serialize();
    submitForm(formData);
});
function submitForm(formData) {

     $.ajax({
        type: "POST",
        url: "/schedule_update.php",
        data: formData,
        dataType: "json",
        cache: false,
        timeout: 8000,
        success: function(data, textStatus, jqXHR) {

            },
        error: function(data, textStatus, errorThrown) {

            }
    });
};

これが私が使用したいプレフィルターコードです。このコードはExpression Engineによって提供されました。

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
     var old_xid = EE.XID;

     jqXHR.setRequestHeader("X-EEXID", old_xid);

     jqXHR.complete(function(xhr) {
        var new_xid = xhr.getResponseHeader('X-EEXID');

        if (new_xid) {
           EE.XID = new_xid;
           $('input[name="XID"]').filter('[value="'+old_xid+'"]').val(new_xid);
        }
     });
});

フォームを含む HTML コードを次に示します。

<form>
  <input type="hidden" name="XID" value="{XID_HASH}" />
  <input type="hidden" name="id" value="1" />
  <input type="checkbox" name="allow" value="yes" class="show" />
</form>

このプレフィルターを自分のコードで動作させるにはどうすればよいですか? JS コードの任意の部分にプレフィルターを追加するとすぐに、DB を更新するためにフォームが PHP ページに送信されなくなります。ご協力いただきありがとうございます。

4

1 に答える 1

0

私もこの問題に遭遇し、それを理解できませんでした。新しい XID コードを作成する計画がある場合は、php スクリプトからの ajax 呼び出しでそれを返さないでください。次のように、json_encode 関数内に「XID_SECURE_HASH」を追加するだけです。

<?php
    public function get_new_xid_hash() {
        $data = array('XID' => XID_SECURE_HASH, 'otherData' => 'Show this text');

        echo json_encode($data);
        die();
    }
?>

ajax 呼び出しからの戻り値は次のようになります。

success: function(data) {
    EE.XID = data.XID;
}

そのため、次に ajax でリクエストを行うと、更新された XID コードが含まれます。

お役に立てれば。

于 2013-10-16T16:22:14.140 に答える