2013-10-16 68 views
0

我想獲得一個jQuery ajaxPrefilter與下面的JS代碼一起工作。這裏是我用來調用ajax函數的代碼。jQuery ajaxPrefilter和表達式引擎

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代碼的任何部分,表單就不會再提交到我的php頁面來更新數據庫。謝謝你提供的所有幫助。

回答

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代碼。

希望這會有所幫助。

+0

我嘗試使用您的PHP代碼將XID_SECURE_HASH返回到JS的html頁面。我還在AJAX調用成功時使用了EE.XID,並使用了表達式引擎提供的ajaxPrefilter。該頁面仍然不會提交。我認爲AJAX預過濾器存在錯誤。你有沒有使用完全相同的預濾器代碼?我試圖將prefilter代碼放在submitform函數中無濟於事。感謝您的幫助 –

+0

我放棄了AJAX預濾器,因爲它不適合我。對於表單,您可以在AJAX調用之前在「submitForm」函數內添加到隱藏的輸入字段,如「$('input [name =」XID「]').val(EE.XID)」。或者您可以在表單字段本身中調用XID_SECURE_HASH,如「「/>」。 – Ufb007