获取"语法错误:意外的令牌"从ajax调用函数时

时间:2015-01-26 10:58:18

标签: javascript php jquery ajax

使用ajax调用php文件时,我收到语法错误。

Uncaught SyntaxError: Unexpected token F
Uncaught SyntaxError: Unexpected token F
Uncaught SyntaxError: Unexpected token F
Uncaught SyntaxError: Unexpected token F
Uncaught SyntaxError: Unexpected token F
Uncaught SyntaxError: Unexpected token F

在复选框字段中使用onclick事件调用change_produkt函数。 该函数的输出如下:

Return of change_produkt function

现在,我调用第二个函数fill_optionen并将数组传递给该函数。它正在为每个对象执行ajax调用。 (在这种情况下为6次)

使用Javascript:

function fill_optionen(optionen) {
     console.log("fill_optionen called.."); // Debug
     var text = "";

     $j.each(JSON.parse(optionen), function (index, value) {

        jQuery.ajax({
           url: 'include/mutation_helper.php',
           data: {func: "render_opt", option: value},
           type: 'post',
           success: function(output) {
              console.log(JSON.parse(output)); // Debug

           }
        });
     });
  }

function change_produkt() {
     console.log("change_produkt called.."); // Debug

     var id_produkt = $j("#produkt").val();
     console.log("DEBUG -- id_produkt:"+id_produkt);

     jQuery.ajax({
        url: 'include/mutation_helper.php',
        data: {func: "get_opts", produkt: id_produkt},
        type: 'post',
        success: function(output) {
           console.log(JSON.parse(output)); // Debug

           fill_optionen(output);
        }
     });
  }

PHP:

function render_opt() {
    if(!isset($_POST['option'])) {
      echo json_encode("error");
      exit;
    }

    $opt = $_POST['option'];

    $render = render($opt, $_SESSION['mutation']);

    echo json_encode("hello");
}

一旦删除调用render函数的行,它就会起作用。但为什么会有错误呢?我甚至没有打印出$render变量。 (render函数仅返回字符串中的html代码。)

2 个答案:

答案 0 :(得分:3)

jQuery会自动检测JSON响应并为您反序列化。正如您所见,在结果对象上调用JSON.parse将导致错误。试试这个:

success: function(output) {
    console.log(output); // Debug
    fill_optionen(output);
}

答案 1 :(得分:3)

您的render函数中似乎有PHP错误。然后PHP打印出它的错误,后来导致JavaScript错误。因为JSON被ajax请求排除为返回输出,并且您得到一个包含PHP错误消息的字符串。请查看ajax请求原始网络数据下的浏览器调试器,确实返回了什么。