使用jQuery在请求标头中设置中文字符

时间:2015-06-02 14:46:17

标签: javascript jquery ajax

我正在制作一个jQuery post请求,其中我正在设置标题中客户端提供的一些信息。电话看起来像这样:

jQuery.ajax({
    url : myURL,
    type : "POST",
    beforeSend : function(request){
        request.setRequestHeader('someInfo', clientInformation);
    },
    data : someData,
    contentType : "text/plain",
    success : successCallback,
    error : errorCallback
});

这很好(大多数情况下),但如果客户端将中文字符输入到我在变量clientInformation中传递的数据中,则请求将失败并显示消息:SyntaxError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest':,然后是请求,然后是is not a valid HTTP header field value.

我尝试通过在请求的beforeSend部分中包含此行来设置编码,但它似乎不起作用:

request.setRequestHeader("Content-Type",
  "application/x-www-form-url-encoded; charset=utf-8");

如何配置我的ajax请求以发送中文(或其他非iso-8859-1)字符?

1 个答案:

答案 0 :(得分:0)

我有类似的问题。错误的原因是自定义标头包含非ASCII字符。

要处理此类字符串,您必须对其进行URL编码:

request.setRequestHeader("Referrer", encodeURI('http://example.com/马轶群'));

或者,如果您要更改我的引荐来源网址:

<button (click)="onClick($event)"></button>
<ng-template #firstTemplate let-modal>
  <div class="modal-footer">
  
    <button type="button" class="btn  btn-primary" (click)="onTest1($event); modal.close('Save click')">test1</button>
  
  </div>
</ng-template>

<ng-template #secondTemplate let-modal>
  <div class="modal-footer">
  
    <button type="button" class="btn  btn-primary" (click)="onTest2($event); modal.close('Save click')">test2</button>
  
  </div>
</ng-template>