JSON.parse抛出Uncaught SyntaxError:位于0的JSON中的意外标记

时间:2016-06-22 19:03:04

标签: javascript php json ajax laravel

我正在尝试在Laravel POS应用程序中获取客户详细信息。我通过AJAX发送客户单元号,以便从控制器发送和返回详细信息。我什么时候尝试将JSON.parse应用于来自服务器的返回数据:

  

未捕获的SyntaxError:位于0的JSON中的意外标记

我无法在代码中发现错误。我从服务器完全相同的方式搜索产品,工作正常。以下是我的代码示例:

我的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);

这给出了consol中的输出:

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

3 个答案:

答案 0 :(得分:0)

jquery docs for the ajax function表示dataType参数拼写为大写T

你有这个:

datatype:'json'

尝试将其更改为:

dataType:'json'

看看是否有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我的控制器功能:

 echo json_encode($data);

此外,dataType必须为

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