【问题标题】:JSON.parse throwing Uncaught SyntaxError: Unexpected token s in JSON at position 0JSON.parse throwing Uncaught SyntaxError: Unexpected token s in JSON at position 0
【发布时间】:2016-10-24 21:12:59
【问题描述】:

我正在尝试在 Laravel POS 应用程序中获取客户详细信息。我通过 AJAX 将客户手机号码发送到 serch 并从控制器返回详细信息。当我尝试对从服务器返回的数据应用 JSON.parse 时,我得到:

Uncaught SyntaxError: Unexpected token s in JSON at position 0

我在我的代码中找不到错误。我已经从运行良好的服务器以完全相同的方式搜索了产品。以下是我的代码示例:

我的 Ajax 函数

  function customersearch(){
        var token=$('input[name=_token]').val();
        var baseUrl=document.getElementById("baseUrl").value;
        var url=baseUrl+"/sales/searchcustomer";
        var id=document.getElementById("customercell").value;

        console.log(id);

        $.ajax({
              type: "GET",
              headers: {'X-CSRF-TOKEN': token},
              url:url,
              data: {id:id},
              datatype:'json',
              success: function(data) {
                    var returndata =JSON.parse(data);
                    console.log(returndata);
                    var id=returndata[0].id;
                    if(id == "undefined") {
                          alert("No Customer found");
                    }
                    else {
                          document.getElementById("cname").value = returndata[0].fname;
                          document.getElementById("cid").value = returndata[0].id;
                    }     
              }
        });
  }

我的控制器功能:

  public function searchcustomer(Request $request){
        $searchingkey = $request->input( 'id' );

        //var_dump($searchingkey);

        $customer = DB::table('customers')
                    ->where('cellno', $searchingkey)
                    ->get(['id','fname']);

        var_dump($customer);

        if (count($customer) == 0) {
              $data = "No data returned"; // empty result
        }
        else {
              $data = $customer;
        }

        return json_encode($data);
  }

网络 XHR 中 var_dump($customer) 的响应

array(1) {
          [0]=>
              object(stdClass)#221 (2) {["id"]=>string(1) "1"
                                        ["fname"]=>string(5) "Ahnaf"}}

[{"id":"1","fname":"Ahnaf"}]

如果我不对 ajax 函数中返回的数据应用 JSON.parse 并且只打印数据变量,例如:

var returndata =data;
console.log(returndata);

这会在控制台中提供如下输出:

array(1) {
         [0]=>
         object(stdClass)#221 (2) {
         ["id"]=>string(1) "1"
         ["fname"]=>string(5) "Ahnaf"
         }
        }
[{"id":"1","fname":"Ahnaf"}]

【问题讨论】:

  • 能否附上从服务器收到的data 变量的日志?因为似乎客户只是收到无效的响应。
  • 查看我的编辑。客户端正在接收数据。
  • 最后一个代码块(即服务器响应)是无效的 JSON,因此无法解析,客户端应该只收到提供的响应的最后一行。
  • 你的意思是说 json_encode 输出错误!!!!!!我该如何修复 json_encode :o ...
  • 抱歉,我不是 PHP 专家,您应该浏览 StackOverflow 以了解相关问题,但看起来不是 javascript 的问题。

标签: javascript php json ajax laravel


【解决方案1】:

jquery docs for the ajax function 表示dataType 参数用大写字母T 拼写。

你有这个:

datatype:'json'

尝试将其更改为:

dataType:'json'

看看有没有帮助。

【讨论】:

  • 奇怪地使用'T'导致客户端没有收到任何数据:o
  • @Ahnaf:还添加一个error 回调,例如error: function(xhr,status,message) { console.log(status+' '+message); },
【解决方案2】:

您可以尝试使用first() 而不是get()。 这应该可以解决这个问题。

【讨论】:

    【解决方案3】:

    您应该使用echo 而不是return 进行ajax 响应

    我的控制器功能:

     echo json_encode($data);
    

    dataType 也必须是

    dataType: "json" // but remove this line because your already have JSON.parse(data);
    

    【讨论】:

    • 试过这个人..不工作..我的猜测是 json 编码给了我一个无效的 json 但不知道为什么..
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多