【问题标题】:Ajax post call returns parsererrorAjax post 调用返回 parsererror
【发布时间】:2016-11-03 04:30:40
【问题描述】:

我如下提交reactjs表单,

submit(){    
    if(this.checkRequiredField()){
    $.ajax({
      url: '/api/Accounts',
      dataType: 'json',
      type: 'POST',
      data: {               
          Name: this.state.name, 
          StartDate :this.state.startDate, 
          EndDate : this.state.endDate,
          UserCount: this.state.userCount          
        },
      success: function(data, status, xhr) {            
        console.log('data added successfully');
      }.bind(this),
      error: function(xhr, status, err) {
        console.error(status, err.toString());
      }.bind(this)
    })
  }

上面的 ajax post 将调用相应的 Web Api post 方法,其中数据成功插入到数据库中。

发布数据后,程序不会返回成功函数,而是调用错误函数并记录错误

parsererror SyntaxError: JSON.parse: 第 1 行的数据意外结束 JSON数据的第1列

当我检查 xhr.status 时,值是 201,statustext 是 Created。

为什么上面的ajax post调用返回parsererror?如何解决这个问题?

【问题讨论】:

  • /api/Accounts 没有返回有效的 JSON
  • 我应该从上面的代码中删除 dataType:'json' 吗?
  • 你期待 JSON 吗? console.log(xhr.responseText) 或查看网络面板中的请求以查看返回的内容。
  • /api/Accounts 返回什么? dataType:'text', 我猜是一个安全的选择
  • 201 通常没有响应正文。删除那个dataType 选项就可以了。

标签: javascript ajax reactjs


【解决方案1】:

问题在于 ajax 调用中提到的数据类型。

post 方法没有返回任何 json 数据, 通过将 dataType :'json' 更改为 dataType:'text' 解决了这个问题。

感谢 Jaromanda X 和 Mathew Jibin 的投入

【讨论】:

    【解决方案2】:

    如果您不希望返回 JSON 格式,则可能需要将其删除。

    submit(){    
        if(this.checkRequiredField()){
        $.ajax({
          url: '/api/Accounts',
          type: 'POST',
          data: {               
              Name: this.state.name, 
              StartDate :this.state.startDate, 
              EndDate : this.state.endDate,
              UserCount: this.state.userCount          
            },
          success: function(data, status, xhr) {            
            console.log('data added successfully');
          }.bind(this),
          error: function(xhr, status, err) {
            console.error(status, err.toString());
          }.bind(this)
        })
      }
    

    【讨论】:

      【解决方案3】:

      只是一个建议, 如果你想从控制器返回一个 json,你可以从控制器传递一个自定义消息,比如成功保存,保持相同的 ajax 代码

        success: function(data, status, xhr) {            
              console.log(data.ResponseText );
            }
      

      控制器: 视情况而定

             return Json(new { success = true, 
      ResponseText = "saved successfully" }, JsonRequestBehavior.AllowGet);
      

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        相关资源
        最近更新 更多