如何在Ajax Post Request中将字符串转换为ByteString?

时间:2018-02-03 02:04:22

标签: ajax post header xmlhttprequest bytestring

我想使用ajax来检索令牌。

根据此documentation,以下是网址,请求标头和请求正文

POST https://api-production.august.com/session

Request Headers:

x-august-api-key: 727dba56-fe45–498d-b4aa-293f96aae0e5
x-kease-api-key: 727dba56-fe45–498d-b4aa-293f96aae0e5
Content-Type: application/json
Accept-Version: 0.0.1
User-Agent: August/Luna-3.2.2

Request Body: (JSON Encoded)
{
  "installId": <Random UUID>,
  "password": "XXXXXXXX",
  "identifier": "phone:+15555551234"
}

我试图用ajax实现这个

  $.ajax({
            type: "POST",
            url: "https://api-production.august.com/session",
            dataType: "json",
            headers:{
                "x-august-api-key":"727dba56-fe45–498d-b4aa-293f96aae0e5",
                "x-kease-api-key":"727dba56-fe45–498d-b4aa-293f96aae0e5",
                "Content-Type": "application/json",
                "Accept-Version": "0.0.1",
                "User-Agent": "August/Luna-3.2.2"
            },
            data: JSON.stringify({installId: "7fb17963-21a8-4c23-8f81-121ed3298ad8",
            password: "password",
            identifier: "phone:+18885554444"})})

但是我没有得到令牌,我收到以下回复:

abort: function abort()
always: function always()
catch: function catch()
done: function add()
fail: function add()
getAllResponseHeaders: function getAllResponseHeaders()
getResponseHeader: function getResponseHeader()
overrideMimeType: function overrideMimeType()
pipe: function pipe()
progress: function add()
promise: function promise()
readyState: 0
responseJSON: undefined
setRequestHeader: function setRequestHeader()
state: function state()
status: 0
statusCode: function statusCode()
statusText: "error"
then: function then()

错误如下:

my error: ajax TypeError: Cannot convert string to ByteString because the character at index 13 has value 8211 which is greater than 255.

我也尝试在谷歌浏览器中运行此功能,但我收到以下错误:

"TypeError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': Value is not a valid ByteString."

我也尝试了以下无效,因为我得到了同样的错误:

   $.ajax({
                type: "POST",
                url: "https://api-production.august.com/session",
                dataType: "json",
                  beforeSend: function(request) {
                    request.setRequestHeader("x-august-api-key", "727dba56-fe45–498d-b4aa-293f96aae0e5");
                  },
                data: JSON.stringify({installId: "7fb17963-21a8-4c23-8f81-121ed3298ad8",
                password: "password",
                identifier: "phone:+18885554444"})})

1 个答案:

答案 0 :(得分:3)

你的第一个错误有点模糊,但确实提到&#34;索引13&#34; (又名第14个字)。您的第二个错误可帮助您发现问题来自setRequestHeader。因此,您应该查看传递给setRequestHeader的字符串,更具体地说,查看这些字符串中的第14个字符。

  1. 的x八月-API - k EY
  2. 727dba56-FE45 498d-b4aa-293f96aae0e5
  3. 现在我们问自己,这些字符k中哪一个更有可能导致我们出现问题?应该直观地认为更可能是违规的角色,所以我们仔细看看它。

    此时我们应该怀疑我们没有使用连字符(ascii值为45),而是使用其他一些看起来像连字符的字符。实际上,如果我们查找ascii值8211(8211来自您的第一个错误),我们会看到相关的字符是短划线。

    有些编辑/观看者会让角色看起来与众不同,而有些则会让人看起来一样。对于我使用谷歌浏览器来查看这个问题,我可以比较你的密钥中的连字符,我可以看到第二个&#34;连字符&#34;看起来不像其他人。已经有点长了。

    hyphen:  -
    en dash: –
    

    因此,您应该使用密钥中的连字符替换短划线字符。那么你的字符串应该能够转换为ByteString没问题。