2015-01-03 64 views
-2

我得到$ .ajaxSetUp(),其中我定義了標題。當有人發出ajax請求時,我期待ajax將這些在$ .ajaxSetUp中定義的頭文件與該請求一起傳遞。但沒有發生。

例如:我有兩個按鈕,我期待標題將與這兩個事件一起發送。但它沒有發生。如何隨這些請求一起發送標題。

function ajaxSetUp() { 
    $.ajaxSetup({ 
     cache: false, 
     headers: { "CustomHeader": "Value1" }, 
    }); 
} 

$('#btn').click(function() { 
    $.ajax({ 
     url: 'HOME/POSTSAMPLEACTION', 
     type: "POST", 
     data: { name: "test" }, 
     async: true, 
     dataType: "json", 
     //headers: { 
     // 'VerificationToken': forgeryId 
     //}, 
     success: function (returnVal) { 
      alert(returnVal); 
     }, 
     error: function (data) { 
      alert("failed"); 
     }, 
    }); 
}); 


$('#btn1').click(function() { 
    $.ajax({ 
    url: 'HOME/ADDACTION', 
    type: "POST", 
    data: { name: "test" }, 
    async: true, 
    dataType: "json", 
    //headers: { 
    // 'VerificationToken': forgeryId 
    //}, 
    success: function (returnVal) { 
     alert(returnVal); 
    }, 
    error: function (data) { 
     alert("failed"); 
    }, 
    }); 

});

 [AjaxValidateAntiForgeryToken] 
    public JsonResult PostSampleAction(string name) 
    { 
     return this.Json("Post Passed Validation -" + name); 
    } 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Helpers; 
using System.Web.Mvc; 

namespace AntiForgerySample 
{ 
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public class AjaxValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     try 
     { 
      if (filterContext.HttpContext.Request.IsAjaxRequest()) // if it is ajax request. 
      { 
       this.ValidateRequestHeader(filterContext.HttpContext.Request); // run the validation. 
      } 
      else 
      { 
       AntiForgery.Validate(); 
      } 
     } 
     catch (HttpAntiForgeryException e) 
     { 
      throw new HttpAntiForgeryException("Anti forgery token not found"); 
     } 
    } 

private void ValidateRequestHeader(HttpRequestBase request) 
    { 
     string cookieToken = string.Empty; 
     string formToken = string.Empty; 
     string customHeader = string.Empty; 
     string tokenValue = request.Headers["VerificationToken"]; // read the header key and validate the tokens. 
     customHeader = request.Headers["CustomHeader"]; 
     if (!string.IsNullOrEmpty(tokenValue)) 
     { 
      string[] tokens = tokenValue.Split(','); 
      if (tokens.Length == 2) 
      { 
       cookieToken = tokens[0].Trim(); 
       formToken = tokens[1].Trim(); 
      } 
     } 

     AntiForgery.Validate(cookieToken, formToken); // this validates the request token. 
    } 
} 

}

+1

請重讀你的描述,並重新寫它,所以它是可以理解的。這是完全不明確的。你說它對每個請求都有效,但你希望它對每個請求都是動態的。不知道有什麼不同。 – charlietfl

+0

爲了回答這個問題,你必須解釋你的腳本是如何組織的。是否只有一個腳本文件包含jQuery和您的自定義腳本,或者兩個腳本文件 - jQuery和您的自定義腳本等?我們需要知道它們是如何在瀏覽器中加載的。 – whirlwin

+0

我首先獲得了jquery腳本,然後是我的自定義腳本文件 – user3270152

回答

0

嘗試

// default options 
$.ajaxSetup({ 
    cache: false, 
    headers: { "CustomHeader": "Value1" }, 
    url: 'HOME/POSTSAMPLEACTION', 
    type: "POST", 
    data: { name: "test" }, 
    async: true, 
    dataType: "json", 
    success: function (returnVal) { 
     alert(returnVal); 
    }, 
    error: function (data) { 
     alert("failed"); 
    } 
}); 

$('#btn').click(function() { 
    // pass custom options here , if required , 
    // to override default options at `$.ajaxSetup` 
    $.ajax(); 
}); 
+0

沒有運氣!!,該方法本身不起作用 – user3270152

+1

@ user3270152'不工作'不能解釋任何東西,是一個毫無價值的技術描述...你真的需要更好地解釋你想要達到的目標 – charlietfl

+0

@ user3270152嘗試http://jsfiddle.net/wdxtv802/。也許,編輯片段以包含所有相關的'html','js';在原始帖子中轉載編輯jsfiddle? – guest271314