0

我有一个问题 console.logging 从我的 jquery ajax 调用发送回脚本的 json 对象的值。

剧本:

for(i=0; i<IDs.length; i++)
    {
        var vendor = IDs[i]; 
        $j.ajax({
                type: "POST",
                url: "/ajax_calls/updatePrices.php",
                data: { 'vendorID': vendor, 'product_id': product_id}
                }).done(function(data) {
                    console.log('The data is ' + data);

                        var basePrice = simpleArray[vendor][colorSelected];

                        //if(data.tier2_range_start[i])
                            console.log('Range start is data.tier2_range_start: ' + data.tier2_range_start);

                        if (qty < data.tier2_range_start){
                            simpleArray[vendor][colorSelected]= basePrice * qty;
                        }
                        else if (qty > data.tier2_range_start){
                            simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier2_discount;
                        }
                        else if (qty > data.tier3_range_start){
                            simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier3_discount;
                        }
                        else if (qty > data.tier4_range_start){
                            simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier4_discount;
                        }
                        else if (qty > data.tier5_range_start){
                            simpleArray[vendor][colorSelected]= (basePrice * qty) * data.tier5_discount;
                        }
                        else{
                            console.log('Something went wrong');
                        }


                    $j('.details'+vendor+ ' .priceBlock').empty();
                    $j('.details'+vendor+ ' .priceBlock').append('<span>'+simpleArray[vendor][colorSelected]+'</span>');
                });
        }//end for

脚本调用:

    <?php
require_once('/var/www/Staging/connect.php');

//post variable
$ID= $_POST['vendorID'];
$product_id= $_POST['product_id'];
$echoArray= array();

    //if ( !isset($echoArray[$x]) )
            //$echoArray[$x] = array();
 $sql = 'SELECT * FROM tier_pricing WHERE vendor_id=' . $ID. ' AND product_id=' . $product_id;
    foreach ($con->query($sql) as $row) {
        $echoArray['vendor_id']= $row['vendor_id'];
            $echoArray['tier2_range_start']= $row['tier2_range_start'];
        $echoArray['tier2_range_stop']= $row['tier2_range_stop'];
        $echoArray['tier3_range_start']= $row['tier3_range_start'];
        $echoArray['tier3_range_stop']= $row['tier3_range_stop'];
        $echoArray['tier4_range_start']= $row['tier4_range_start'];
        $echoArray['tier4_range_stop']= $row['tier4_range_stop'];
        $echoArray['tier5_range_start']= $row['tier5_range_start'];
        $echoArray['tier2_discount']= $row['tier2_discount'];
        $echoArray['tier3_discount']= $row['tier3_discount'];
        $echoArray['tier4_discount']= $row['tier4_discount'];
        $echoArray['tier5_discount']= $row['tier5_discount'];
    }

echo json_encode($echoArray); 
?>

数据记录为(例如,在没有空数据对象的循环上):

[15:06:13.397] The data is {"vendor_id":"3","tier2_range_start":"5","tier2_range_stop":"20","tier3_range_start":"20","tier3_range_stop":"100","tier4_range_start":"100","tier4_range_stop":"500","tier5_range_start":"500","tier2_discount":"2","tier3_discount":"3.1","tier4_discount":"4.3","tier5_discount":"5"}

为什么 data.tier2_range_start 未定义?

4

3 回答 3

0

可能你的问题出在data[vendor].tier2_range_start.

如果您从服务器获得的所有响应都与您的示例 () 具有相同的形式,则您[Array, Array, Object]的代码仅在vendor=2. 否则,您将尝试访问不存在的数组中的成员或访问不存在的元素。

因此,您可以检查使用他IDs作为索引的值是否真的是您想要的。

于 2013-05-28T18:42:48.973 回答
0

您需要告诉 jQuery 返回的数据是 json,除非您在响应中放置适当的 mime 标头,否则 jQuery 应该如何知道?

在 PHP 开头的某个地方:header('Content-type: text/json');

在你的 ajax 中:

...
data: { 'vendorID': vendor, 'product_id': product_id},
dataType: "json",
...

那么 jQuery 正在为您完成这项工作。你的痕迹应该看起来像

[15:06:13.397] The data is Object object
于 2013-05-29T00:03:26.243 回答
0

我不得不把 var data= JSON.parse(data); 在我的jQuery中。有谁知道为什么?

于 2013-05-28T19:30:54.417 回答