Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在ajax响应中解析JSON数据(包含HTML标记)_Javascript_Json_Ajax - Fatal编程技术网

Javascript 无法在ajax响应中解析JSON数据(包含HTML标记)

Javascript 无法在ajax响应中解析JSON数据(包含HTML标记),javascript,json,ajax,Javascript,Json,Ajax,编辑 我简化了我试图用php脚本进行JSON编码的数组。php脚本中的returnArr现在只有一个键、值对,但仍然出现无效字符错误: PHP script: $returnArr["a"] = "val"; er('Content-type:application/json;charset=utf-8'); echo(json_encode($returnArr)); 我试图从服务器端php脚本向ajax调用返回一个数组(以key=>value的形式)。Ajax接收

编辑

我简化了我试图用php脚本进行JSON编码的数组。php脚本中的returnArr现在只有一个键、值对,但仍然出现无效字符错误:

PHP script:
    $returnArr["a"] = "val";
    er('Content-type:application/json;charset=utf-8');
    echo(json_encode($returnArr));

我试图从服务器端php脚本向ajax调用返回一个数组(以key=>value的形式)。Ajax接收到响应,但无法解析服务器返回的JSON数据。在ajax success函数中解析返回数据的行上给出错误“无效字符”

下面是我的服务器端脚本:

$returnArr = Array();

    header('Content-Type: application/json');
    foreach($selectUpdatedRecord as $eachRow)
    {
        $key = $eachRow['cat_id'];
        $htmlStr = '<td>'.$eachRow["cat_id"].'</td>
            <td>'.$eachRow["cat_name"].'</td>
            <td>
                <select name="statCat-catId-'.$eachRow["cat_id"].'" disabled="disabled">
                    <option value="'.$eachRow["cat_status"].'" selected="selected">'.$eachRow["cat_status"].'</option>
                    <option value="Enabled">Enabled</option>
                    <option value="Disabled">Disabled</option>
                </select></td>
            <td>'.$eachRow["created_at"].'</td>
            <td><button type="submit" id="save-cat-'.$eachRow["cat_id"].'" name="save-cat-'.$eachRow["cat_id"].'" class="btn btn-info save-ind">Save</button></td>
            <td><input type="checkbox" class="select_cats" name="cat_edit_array" value="'.$eachRow['cat_id'].'"></td>
        ';

        $returnArr[$key] = $htmlStr;
    }
    echo json_encode($returnArr);
我尝试在ajax调用中包含数据类型:作为JSON,并省略了JSON.parse调用,但结果仍然相同


非常感谢您的帮助。

问题确实出在JSON.parse中,但是,还有更多的问题

问题1:JSON.parse方法需要字符串作为参数。因此,当您提供数组或对象时,会出现错误。检查以下示例代码:

    var obj = {};
    try {
        JSON.parse( obj );  
    }
    catch( err ) {
        console.error( err );
    }
问题-2:现在,第二个问题是不是您可能已经理解的PHP中的json_encode()。因为json_encode()PHP函数确实返回字符串。但是,由于您正在发送JSON MIME类型标头:

header('Content-Type: application/json');
jQuery将其作为JSON对象接收

默认情况下,PHP以html的形式返回输出,因此,如果删除标题,则不会出现错误。因此,请清除浏览器缓存并尝试删除标题或使用以下标题之一:

header('Content-Type: text/plain');
// or the default one:
// header('Content-Type: text/html');
问题3:您还需要了解jQuery ajax函数的数据类型属性

根据文档,数据类型定义为:

期望从服务器返回的数据类型。如果未指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将生成XML,在1.4中JSON将生成JavaScript对象,在1.4中脚本将执行脚本,其他任何内容都将作为字符串返回)

因此,当您不指定数据类型时,jQuery会因为您的MIME类型头自动将其作为JSON获取。因此,即使您指定:

dataType: 'json',
同样的问题不会消失。现在猜猜如果我们特别告诉jQuery以文本形式接收数据会发生什么情况:

dataType: 'text',
你可能猜对了。一旦我们提到要接收数据作为文本,即使在PHP中我们发送JSON MIME类型报头,jQuery会将其视为文本,JSON.PARSE将无错误地执行。 注意:当您通过更改标题进行测试时,请记住浏览器将缓存结果。因此,每次使用新标题进行测试或使用其他随机查询字符串调用脚本时,都需要清除浏览器缓存,如下所示:


您还可以检查浏览器从浏览器开发工具的网络面板接收的数据类型(如html、文本、json等)(数据类型将显示在类型列中)。

您从请求中得到了什么?也许它是空的,或者不是json?我看到您试图将HTML添加到json对象中。我认为在javascript中,这是一个错误的json设计,因此无法解析为对象数组。returnedText可能已经是json了。我认为您不必解析它,您可以从浏览器的“网络”选项卡(开发人员工具)验证呼叫的响应。如果可能的话,在这里发布响应,这样我们就可以找出哪里出了问题。尝试使用
header('Content-type:application/json;charset=utf-8')
dataType: 'text',
url: "ajax_catEdit_loader.php?rand=" + Math.random(),