带有自定义HTTP标头字段的JSON帖子

时间:2011-08-17 22:28:16

标签: jquery json post http-headers

我继承了一些最终将成为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。但该帖子从不检索数据,服务器本身也没有识别出任何调用(即使是不完整的调用)。

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

4 个答案:

答案 0 :(得分:116)

您发布的内容存在语法错误,但由于您无法通过$.post()传递HTTP标头,因此没有任何区别。

如果您使用的是jQuery版本> = 1.5,请切换到$.ajax()并传递headersdocs)选项。 (如果您使用的是较旧版本的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);
    }
});

答案 1 :(得分:13)

如果想要使用.post(),那么这将为将来使用jquery做出的请求设置标题

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

然后正常进行.post()调用。

答案 2 :(得分:2)

我按照你提到的那样尝试过,但只有第一个参数正在通过,而所有参数都在服务器中显示为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.");        
    }

    });

答案 3 :(得分:0)

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

JQuery> 1.12现在支持能够通过JQuery.post($ .post({...})更改请求的每一小部分。请参见https://api.jquery.com/jquery.post/

中的第二个函数签名