【问题标题】:JSON Post with Customized HTTPHeader Field带有自定义 HTTP 标头字段的 JSON 发布
【发布时间】:2011-10-29 08:11:47
【问题描述】:

我继承了一些最终将成为 API 调用一部分的代码。基于现有代码,调用是一个使用 access_token 检索 JSON 代码的帖子。虽然这通常很简单,并且与其他所有 API 一样,但此代码需要为客户端密码提供自定义的 httpheader 字段。

我能够使用 URLRequest 等在 Objective C 中完成这项工作,但现在我正在为 Web 组件创建调用,我遇到了障碍。

我正在使用一个非常标准的 jquery 帖子

        $.post('https://url.com', 
        {access_token:'XXXXXXXXXXXXXXXXXXX',
         function(data){
           console.info(data);
         }, 'json');

在标头中带有 HTTP-EQUIV。但是帖子从不检索数据,服务器本身也不会识别出任何调用(即使是不完整的调用)。

我可能不得不废弃这段代码并重新开始,但如果有人以前遇到过这个问题,请提供任何见解。

【问题讨论】:

    标签: jquery json post http-headers


    【解决方案1】:

    您发布的内容有语法错误,但没有区别,因为您无法通过 $.post() 传递 HTTP 标头。

    如果您使用的是 jQuery 版本 >= 1.5,请切换到 $.ajax() 并传递 headers (docs) 选项。 (如果您使用的是旧版本的 jQuery,我将通过 beforeSend 选项向您展示如何操作。)

    $.ajax({
        url: 'https://url.com',
        type: 'post',
        data: {
            access_token: 'XXXXXXXXXXXXXXXXXXX'
        },
        headers: {
            Header_Name_One: 'Header Value One',   //If your header name has spaces or any other char not appropriate
            "Header Name Two": 'Header Value Two'  //for object property name, use quoted notation shown in second
        },
        dataType: 'json',
        success: function (data) {
            console.info(data);
        }
    });
    

    【讨论】:

    • 非常感谢!你救了我几个小时的挫败感。现在,该对象被拉入 Safari,而不是 Firefox 或 Chrome。这是一个已知的相关问题吗?如果是这样,我会喜欢你的洞察力。如果没有,我会想办法的。
    • 在使用 Chrome 和 Firefox 时,您看到什么(通过开发者工具或 Firebug)被发送到服务器,您看到什么返回?您在服务器上进行了哪些调试以查看请求是否传入和正确?
    • Firebug 中完全没有出现错误,但是没有返回。在 Firefox Web 控制台中,我看到:'OPTIONS https://[url.com] [HTTP/1.1 200 OK 441ms]',在 Chrome 开发人员工具中,我看到:XMLHttpRequest 无法加载'url.com。 Access-Control-Allow-Origin 不允许 Origin null。服务器显示请求进入。如果请求不正确,它会记录错误消息。
    • 好吧,如果没有访问代码或系统,我将无法提供太多帮助。 AJAX 请求与提供页面的域相同,对吗?
    • 是的,但我想我找到了解决方案。感谢您的所有帮助!
    【解决方案2】:

    如果想使用 .post() 那么 这将为所有未来使用 jquery 发出的请求设置标头

    $.ajaxSetup({
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    });
    

    然后像往常一样进行 .post() 调用。

    【讨论】:

      【解决方案3】:

      我按照您的说法进行了尝试,但只有第一个参数通过,其余参数都以undefined 出现在服务器中。我将 JSONWebToken 作为标题的一部分传递。

      .ajax({
          url: 'api/outletadd',
          type: 'post',
          data: { outletname:outletname , addressA:addressA , addressB:addressB, city:city , postcode:postcode , state:state , country:country , menuid:menuid },
          headers: {
              authorization: storedJWT
          },
          dataType: 'json',
          success: function (data){
              alert("Outlet Created");
          },
          error: function (data){
              alert("Outlet Creation Failed, please try again.");        
          }
      
          });
      

      【讨论】:

        【解决方案4】:

        只是想为未来的开发人员更新此线程。

        JQuery >1.12 现在支持通过 JQuery.post ($.post({...}) 更改请求的每一小块。参见https://api.jquery.com/jquery.post/ 中的第二个函数签名

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-03
          • 2012-03-07
          • 1970-01-01
          相关资源
          最近更新 更多