相关疑难解决方法(0)

使用jQuery在AJAX请求中添加标头

我想从jQuery向AJAX POST请求添加自定义标头.

我试过这个:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});
Run Code Online (Sandbox Code Playgroud)

当我发送此请求并使用FireBug观看时,我看到此标题:

选项xxxx/yyyy HTTP/1.1
主机:127.0.0.1:6666
User-Agent:Mozilla/5.0(Windows NT 6.1; WOW64; rv:11.0)Gecko/20100101 Firefox/11.0
接受:text/html,application/xhtml + xml, application/xml; q = 0.9,/ ; q = 0.8
Accept-Language:fr,fr-fr; q = 0.8,en-us; q = 0.5,en; q = 0.3
Accept-Encoding:gzip,deflate
Connection:keep -alive
Origin:null
Access-Control-Request-Method:POST
Access-Control-Request-Headers:my-first-header,my-second-header
Pragma:no-cache
Cache-Control:no-cache

为什么我的自定义标题会转到Access-Control-Request-Headers:

Access-Control-Request-Headers:my-first-header,my-second-header

我期待像这样的标头值:

My-First-Header:第一个值
My-Second-Header:第二个值

可能吗?

javascript ajax jquery post http-headers

377
推荐指数
4
解决办法
79万
查看次数

CORS - 如何"预检"httprequest?

我正在尝试向WCF服务(我拥有)进行跨域HTTP请求.我已经阅读了几种处理跨域脚本限制的技术.因为我的服务必须同时兼顾GET和POST请求,所以我无法实现一些动态脚本标记,其src是GET请求的URL.由于我可以自由地在服务器上进行更改,因此我开始尝试实施一种解决方法,该方法涉及配置服务器响应,以包含"Access-Control-Allow-Origin"标头和带有OPTIONS请求的"预检"请求.我从这篇文章中得到了一个想法:让CORS正常工作

在服务器端,我的Web方法是在HTTP响应中添加"Access-Control-Allow-Origin:*".我现在可以看到响应包含此标题.我的问题是:我如何"预检"一个请求(OPTIONS)?我正在使用jQuery.getJSON来发出GET请求,但浏览器会立即取消臭名昭着的请求:

Access-Control-Allow-Origin不允许使用origin http:// localhost

有人熟悉这种CORS技术吗?需要在客户端进行哪些更改以预检我的请求?

谢谢!

javascript wcf jquery cors

89
推荐指数
1
解决办法
17万
查看次数

如何在c#中获取当前用户时区

我正在MVC3中构建一个应用程序,当用户进入我的网站时,我想知道该用户的时区.我想知道如何在c#中执行此操作而不是在javaScript中执行此操作?

c# asp.net asp.net-mvc-3

34
推荐指数
5
解决办法
7万
查看次数

使用Vue.js进行JWT身份验证

我正在使用Vue.js和vue-router开发SPA,现在我正在使用JWT处理授权/身份验证.我对后端(API端点)进行了整理,以便它响应登录时发出令牌,并在后续请求中检查必需的头.我现在想要实现客户端(Vue.js)方面.

据我了解,从根本上说,我需要做的是要求对除"/"和"/ login"之外的所有路由进行身份验证.如果存在身份验证,则我在Authorization标头中提交令牌(在成功登录后存储在localStorage中).如果无法在服务器上成功验证,则由于错误响应,用户将被重定向到"/ login".

所以,我有几个问题需要做些什么来实现这个:

  1. 除了登录端点之外,我如何最好地为每个请求提交标头?我知道JQuery,我用于AJAX,我可以配置一个全局'ajaxSetup',它将导致每个请求都提交头,但我如何指定异常?单独将标头添加到每个API端点请求是很麻烦的.

  2. 同样,如何设置一个身份验证预检查,适用于除上述2('/'和'/ login')之外的所有路由?

  3. 鉴于我正在使用显然有效的身份验证(显然是因为它仍然必须在API端点上进行验证)以确定是否显示某些菜单项等,是否可以使其更加精细化并根据令牌有效负载中的"范围"字段确定不同权限级别的不同内容?显然,处理JWT令牌的最简单方法纯粹是确定它是否存在,因此在客户端不需要解析内容.但鉴于JWT确实允许有意义的内容,尝试在客户端和服务器上使用该含义是一个坏主意吗?显然,如果令牌本身是加密的,那么这变得不太实用,所以我的想法是使用未加密的令牌(并确保在有效载荷中没有任何后果暴露).

jwt vue.js

15
推荐指数
1
解决办法
1万
查看次数

如何为所有RESTAdapter余提请求添加标头

API需要指定api版本application/vnd.api+json;version=1,它还需要安全的x-app-id和x-app-secret.有没有办法在Ember的RESTAdapter中指定它?

尝试请求标头后

App.Adapter = DS.RESTAdapter.extend({
  namespace: 'api',
  beforeSend: function(xhr) {
    xhr.setRequestHeader('x-my-custom-header', 'some value');
  }
})
Run Code Online (Sandbox Code Playgroud)

App.Adapter = DS.RESTAdapter.extend({
  bulkCommit: true,
  namespace: 'api',
  headers: { 
   'Accept': 'application/vnd.app+json;version=1',
   'x-appid': '2375498237',
   'x-secret': '238945298235236236236236375923'
  },
  ajax: function(url, type, hash) {
    if (this.headers !== undefined) {
      var headers = this.headers;
      hash.beforeSend = function (xhr) {
        Ember.keys(headers).forEach(function(key) {
          xhr.setRequestHeader(key, headers[key]);
        });
      };
    }
    return this._super(url, type, hash);
  }
});

App.Store = DS.Store.extend({ adapter: App.Adapter.create() }); 
App.Store = App.Store.create();
Run Code Online (Sandbox Code Playgroud)

更新#2

不再需要上面提到的解决方案,因为Ember现在默认支持此行为.您只需要提供headers,它将自动添加.

查看这里的文档 …

ember.js ember-data

13
推荐指数
1
解决办法
9712
查看次数

jQuery AJAX调用导致错误状态403

我正在使用jQuery AJAX查询Web服务.我的查询如下所示:

var serviceEndpoint = 'http://example.com/object/details?version=1.1';
$.ajax({
  type: 'GET', 
  url: serviceEndpoint,
  dataType: 'jsonp',
  contentType: 'jsonp',
  headers: { 'api-key':'myKey' },
  success: onSuccess,
  error: onFailure
});
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,我得到403的状态错误.我不明白为什么我的调用导致状态代码为403.我控制了我的服务的安全性并且它被标记为全开.我知道密钥是有效的,因为我在另一个呼叫中使用它,这是有效的.以下是有效的通话:

var endpoint = 'http://example.com/object/data/item?version=1.1';
$.ajax({ 
  type: 'POST', 
  url: endpoint, 
  cache: 'false',
  contentType:'application/json',
  headers: {
    'api-key':'myKey',
    'Content-Type':'application/json'
  },
  data: JSON.stringify({
    id: 5,
    count:true
  }),
  success: onDataSuccess,
  error: onDataFailure
});
Run Code Online (Sandbox Code Playgroud)

我知道这是两个不同的端点.但我100%确信这不是服务器端身份验证或权限错误.再一次,服务器端的一切都是敞开的.这意味着我在客户端请求上犯了一些错误.

我觉得我应该知道这个请求是在开发期间做出的.所以,我是从http:// localhost:3000运行的.出于这个原因,我立即认为这是一个CORS问题.但一切看起来都很正确 我的POST请求有效,但我的GET并没有让我绝对感到沮丧.我错过了什么吗?会是什么呢?

ajax jquery cors http-status-code-403

13
推荐指数
1
解决办法
5万
查看次数

jQuery AJAX自定义标题

我正在尝试对iContact API执行请求,该请求需要使用自定义标头进行身份验证(http://developer.icontact.com/documentation/authenticate-requests).这是我的代码:

$.ajax({
        type: "GET", 
        url: "https://app.icontact.com/icp/a/",
        contentType: "application/json",
        beforeSend: function(jqXHR, settings){
                jqXHR.setRequestHeader("Accept", "application/json");
                jqXHR.setRequestHeader("Api-Version", iContact_API_version);
                jqXHR.setRequestHeader("Api-AppId", iContact_appID);
                jqXHR.setRequestHeader("Api-Username", iContact_username);
                jqXHR.setRequestHeader("API-Password", iContact_appPassword);}
});
Run Code Online (Sandbox Code Playgroud)

由于某种原因,请求没有通过.但是,当我手动执行相同的请求(使用Chrome REST控制台)时,它可以正常工作.如果我取出自定义标头(API-*),请求会通过但当然身份验证失败,我会回到常规HTML页面.

我切换到Firefox并检查了请求/响应标头:

请求:

Host    app.icontact.com
User-Agent  Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Origin  http://184.72.61.244
Access-Control-Request-Me...    GET
Access-Control-Request-He...    api-appid,api-password,api-username,api-version
Run Code Online (Sandbox Code Playgroud)

响应:

HTTP/1.1 302 Found
Date: Tue, 14 Jun 2011 23:43:56 GMT
Server: Apache/2.2.9 (Debian)
Set-Cookie: intellicontact_phpsess=1c7ca333017b47f46edd893dae584781; path=/; domain=.icontact.com; secure; HttpOnly …
Run Code Online (Sandbox Code Playgroud)

ajax jquery google-chrome

10
推荐指数
1
解决办法
2万
查看次数

Jquery文件上传 - 不在IE9中发送标头

我正在使用jQuery Fileupload上传文件.它不发送我设置到服务器的标头.为什么Authorization标头仅在IE中缺失但在chrome中传递?

这是代码:

upload_photo: function(){
  var url =  '/api/v1/upload';
  $('#photoupload').fileupload({
      url: url,
      dataType: 'json',
      paramName: 'uploadFile',
      beforeSend: function ( xhr ) {
          setHeader(xhr);
          $("#check_progress").html('true');
      },                    
      done: function (e, responseJSON) {
          var id = responseJSON.result.id;
          url = responseJSON.result.url;
          var photo_ids = $("#photo_ids");
          var val = photo_ids.val();
          photo_ids.val(val + id.toString() + ",");
          $(".photothumb-wapper").append('<div class=\"photothumb\" id="post_photo_'+id+'"><div><img  src=\"'+url+'\" /></div><img class=\"thumb-delete photo_delete\" id=\"'+id+'\" title=\"Remove\" src=\"/assets/delete-red.png\"></div>');
          $("#check_progress").html("");
      },
      start: function (e, data) {
          $(".photothumb-wapper").append('<div class="photothumb photoprogress" style="border:none"><img src="/assets/ajax-loader.gif" /></div>');
      }, …
Run Code Online (Sandbox Code Playgroud)

javascript http-headers internet-explorer-9 blueimp jquery-file-upload

7
推荐指数
1
解决办法
5043
查看次数

骨干模型 - 根据REST操作更改URL查询参数

在Backbone模型中,我们有url和urlRoot属性:

           url: function(){

               return '/jobs'
            },


            urlRoot: function () {

                return '/jobs'
            },
Run Code Online (Sandbox Code Playgroud)

但是我想在URL中添加params或查询参数,具体取决于GET,POST,PUT,DELETE等请求的类型.

所以我想做这样的事情:

     url: function(type, opts){ //type and opts arguments are not available in Backbone, I just made them up for this example

          var url = '/jobs';

           switch (type) {
              case 'GET':
                break;
              case 'POST':
                break;
              case 'PUT':
                url = url + '?optimisticDelete=' + opts.optimisticDelete;
                break;
              case 'DELETE':
                url = url + '?upsert=' + opts.upsert;
                break;

               default:
                 throw new Error('no match');
                }

          return url;
    },
Run Code Online (Sandbox Code Playgroud)

有没有一个很好的方法来完成这样的事情?

javascript backbone.js

7
推荐指数
1
解决办法
952
查看次数

如何像jjax一样在jQuery.load中传递头文件?

几天后我一直被困在这个问题上.我想在jQuery.load()中发送一些头文件数据.似乎jQuery.load从不发送标头,如ajax.有人可以解释如何,或者是否有必要?顺便说一下,我的英语不好.

这是语法:

$loadingBay.load(href, settings.data, function (data, status) {
    prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
});
Run Code Online (Sandbox Code Playgroud)

非常感谢

javascript ajax jquery

5
推荐指数
2
解决办法
9509
查看次数