JavaScript问题“意外令牌:”

时间:2019-01-14 19:58:19

标签: javascript ajax shopify liquid

  

错误

就像标题中所说的那样,我的javascript错误

Uncaught SyntaxError: Unexpected token :

此错误的结果是:

{
"id":19728251846714,
"properties":null,
"quantity":1,
"variant_id":19728251846714,
"key":"19728251846714:f1a55a69aed71e7c10ca53fd3549edda",
"title":"Ritual Petalos de rosas y vino tinto - Obispado",
"price":139900,
"original_price":139900,
"discounted_price":139900,
"line_price":139900,
"original_line_price":139900,
"total_discount":0,
"discounts":[],
"sku":"",
"grams":0,
"vendor":"Casa Azul Spa",
"taxable":false,
"product_id":1959512244282,
"gift_card":false,
"url":"\/products\/ritual-petalos-de-rosas-y-vino-tinto?variant=19728251846714",
"image":"https:\/\/cdn.shopify.com\/s\/files\/1\/0087\/2267\/7818\/products\/PETALOS_DE_ROSAS_Y_VINO_TINTO.jpg?v=1538589224",
"handle":"ritual-petalos-de-rosas-y-vino-tinto",
"requires_shipping":false,
"product_type":"",
"product_title":"Ritual Petalos de rosas y vino tinto",
"product_description":"\u0026lt;!--\ntd {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}\n--\u003eRitual Pétalos de Rosas y Vino tinto, Exquisito masaje que ofrece bienestar, relajación e hidrata la piel. Realizamos el ritual con mascarilla hidratante y antioxidante, piedras calientes, y cuarzos para ofrecer un delicioso y aromático descanso a todo el cuerpo.",
"variant_title":"Obispado",
"variant_options":["Obispado"]
}

我正在读取JSON并在多个平台之间验证JSON时,在这里看不到错误...

  

代码

以下错误是由于此功能引起的:

jQuery.getJSON('/products/'+getProduct.product_handle+'.js', function(product) {

    product.variants.forEach(function(variant) {
      if (getProduct.sucursal == variant.title){
        jQuery.post('/cart/add.js', {
          quantity: 1,
          id: variant.id
        });
      }
    });

  });
  

平台

我正在使用模板语言Liquid来与Shopify一起工作,在此Liquid中,我有一个<script>标签,该标签运行AJAX以便从Shopify调用方法。

  

更多信息

我知道该错误必须具有javascript语法,但是就像我之前所说的,我没有看到该错误。

有人知道这个错误吗?

我很感谢每个答案。

4 个答案:

答案 0 :(得分:0)

尝试使用jquery.ajax调用的长格式来手动指定所有AJAX参数:

jQuery.ajax({
  url:'/cart/add.js',
  type: 'post',
  dataType: 'json',
  data: { quantity:1, variant: variant.id }
  // Optional: success/error functions
})

基于其他答案,可能是jQuery期望一种类型的响应标头,但实际上却接收到另一种类型。

如果这行得通,您应该可以通过为数据类型(jQuery.post)提供第四个参数来返回使用'json'https://api.jquery.com/jquery.post/

答案 1 :(得分:0)

只需添加@ dave-b的答案:Shopify文档的直接替代品就是通过序列化收集表单数据:

  jQuery.post({
    url:'/cart/add.js',
    type: 'post',
    dataType: 'json',
    data: $('form[action="/cart/add"]').serialize()
    success: function() {
      //
    },
    error: function() {
      //
    }
  })

答案 2 :(得分:-1)

您的URL以.js结尾,这意味着服务器将以Content-Type: application/javascript标头响应,以告知浏览器它正在发送JavaScript。

您引用的数据不是JavaScript,而是JSON。

jQuery正在尝试像执行JavaScript一样执行JSON(因为服务器表示应该对数据执行此操作),并且失败了。

让服务器使用正确的JSON数据头响应:Content-Type: application/json

您可以通过将.js替换为.json来做到这一点。

答案 3 :(得分:-1)

我不知道您使用什么来编码JSON,但是换行符可能存在问题

可能导致此问题的示例:

JSON.parse(`{
"id":19728251846714,
"properties":null,
"quantity":1,
"variant_id":19728251846714,
"key":"19728251846714:f1a55a69aed71e7c10ca53fd3549edda",
"title":"Ritual Petalos de rosas y vino tinto - Obispado",
"price":139900,
"original_price":139900,
"discounted_price":139900,
"line_price":139900,
"original_line_price":139900,
"total_discount":0,
"discounts":[],
"sku":"",
"grams":0,
"vendor":"Casa Azul Spa",
"taxable":false,
"product_id":1959512244282,
"gift_card":false,
"url":"\/products\/ritual-petalos-de-rosas-y-vino-tinto?variant=19728251846714",
"image":"https:\/\/cdn.shopify.com\/s\/files\/1\/0087\/2267\/7818\/products\/PETALOS_DE_ROSAS_Y_VINO_TINTO.jpg?v=1538589224",
"handle":"ritual-petalos-de-rosas-y-vino-tinto",
"requires_shipping":false,
"product_type":"",
"product_title":"Ritual Petalos de rosas y vino tinto",
"product_description":"\u0026lt;!--\ntd {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}\n--\u003eRitual Pétalos de Rosas y Vino tinto, Exquisito masaje que ofrece bienestar, relajación e hidrata la piel. Realizamos el ritual con mascarilla hidratante y antioxidante, piedras calientes, y cuarzos para ofrecer un delicioso y aromático descanso a todo el cuerpo.",
"variant_title":"Obispado",
"variant_options":["Obispado"]
}`)

这说明了为什么意外令牌为空。

删除空格可解决您的问题,但这不是解决方案。您应该通过修复JSON编码器来解决此问题。