IE中的Javascript / PHP JSON Array null

时间:2014-03-13 22:10:35

标签: javascript php ajax json

您好我有一个通过ajax连接到php脚本的JavaScript代码。这个php脚本返回一个数组。在ajax调用的success函数中,我使用返回的数组向用户显示信息。这一切在我尝试过的所有浏览器中都能正常工作,除了Internet Explorer。我收到以下错误:

Unable to get property '0' of undefined or null reference

'0'是数组中第一个元素的索引。这是代码:

JS

$.ajax({
    type: "POST",
    url: "/add.php",
    data: 'id=' + itemid,
    dataType: "json",
    success: function (data) {
        document.getElementById("name").innerHTML = data[0];
        document.getElementById("desc").innerHTML = data[1];
        document.getElementById("price").innerHTML = data[2];
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    }
});

PHP

$output = array();
$output[0] = $itemname;
$output[1] = $itemdescription;
$output[2] = $itemprice;
echo json_encode($output);
exit();

我在成功函数中尝试了console.log(data),在Internet Explorer中它返回null,而其他浏览器则返回数组。有人知道这里有什么问题吗?

编辑:IE中控制台上的错误代码是SCRIPT5007。搜索到这个,这意味着:

You attempted to invoke the Object.prototype.toString or Object.prototype.valueOf method on an object of a type other than Object. The object of this type of invocation must be of type Object.

链接:http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-GB&k=k(VS.WebClient.Help.SCRIPT5007)

2 个答案:

答案 0 :(得分:1)

尝试:

$output = array();
$output[] = $itemname;
$output[] = $itemdescription;
$output[] = $itemprice;
echo json_encode($output);
exit();

请注意,$output[]=xxx表示:将xxx附加到$output,其中$output[1]=xxx表示,将xxx放在$output的索引1处。

请注意,您也可以这样做:

$output = array($itemname, $itemdescription, $itemprice);

编辑评论和倍数OP编辑:

尝试打印数据以查看正在进行的操作:

success: function (data) {
    console.log(data);
    document.getElementById("name").innerHTML = data[0];
    document.getElementById("desc").innerHTML = data[1];
    document.getElementById("price").innerHTML = data[2];
},

您将在控制台中看到data包含的内容(使用F12)

答案 1 :(得分:0)

不太清楚为什么,试着把它变成一个kv对象?

$output = array(
    'item' => array (
        $itemname, $itemdescription, $itemprice
    )
);
echo json_encode($output);
exit();