2015-05-28 43 views
1

这是我的PHP文件,该文件得到我的产品,由于某些原因,我不能送$数据[“result_1”]通过Ajax不过,如果我只有$数据[“result_1”]在if语句的话它到达尽管阿贾克斯,是什么问题在这里,我似乎无法解决它?JSON没有通过ajax调用到达?

require '../core/init.php'; 

if ($_POST['weekbtn'] == "mon") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "tue") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "wed") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "thu") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "fri") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "sat") { 
    getProduct(); 
} 
elseif ($_POST['weekbtn'] == "sun") { 
    getProduct(); 
} 


function getProduct() { 
    $data['result_1'] = ''; 
    $weekday = $_POST['weekbtn']; 
    $preorders = DBPDO::getInstance()->get('standardorder', array(
         array('dayOfWeek','=', "'$weekday'"), 
         array('customerId','=', $_SESSION['customer_id']), 
         array('completed','=', 0) 
       )); 
    foreach ($preorders->results() as $preorder) { 
     $data['result_1'] .= ''$preorder->imageName;''; 
    } 
    echo json_encode($data); 
    exit(); 
} 

,这是我的Ajax调用:

$(document).on('click', "input[name=weekbtn]", function(event) { 

     event.preventDefault(); 

     var action = $(this).attr('value'); 

     $.ajax({ 

      type: "POST", 

      url: "php/standingproduct.php", 

      data: { 

       weekbtn: action 

      }, 
      dataType: 'JSON', 
      success: function(data) { 

       alert(data.result_1); 

       $("#otheritems").html(data.result_2); 

      } 

     }); 

}); 
+0

你有什么'错误'?和你卡在哪里? – Saty

+0

没有错误,我可以直观地看到。问题是在foreach循环中发送我的$ data ['result_1']值。例如,当我有外部循环的$ data ['result_1']值,那么ajax会发出警报。现在它不是。 – Elevant

+0

当我更改mon来获取并测试它时,json显示在php文件中,但它没有到达ajax。 – Elevant

回答

0

您需要将$_POST['weekbtn']传递到您的getProduct()。你不直接调用你的函数。所以你需要传入参数。

<?php 
require '../core/init.php'; 

if ($_POST['weekbtn'] == "mon") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "tue") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "wed") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "thu") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "fri") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "sat") { 
    getProduct($_POST['weekbtn']); 
} 
elseif ($_POST['weekbtn'] == "sun") { 
    getProduct($_POST['weekbtn']); 
} 


function getProduct($weekday) { 
    $data['result_1'] = ''; 
    $preorders = DBPDO::getInstance()->get('standardorder', array(
         array('dayOfWeek','=', "'$weekday'"), 
         array('customerId','=', $_SESSION['customer_id']), 
         array('completed','=', 0) 
       )); 
    foreach ($preorders->results() as $preorder) { 
     $data['result_1'] .= ''$preorder->imageName;''; 
    } 
    echo json_encode($data); 
    exit(); 
} 
+0

*您需要将您的$ _POST ['weekbtn']传递给您的getProduct()。* - 为什么? '$ _POST'是一个超全球性的。该功能已经访问它。 – Quentin

2

一些注意事项:

  1. 你并不需要所有这些条件。您可以只有一个条件比较按钮的值并运行该功能。

  2. 由于该功能是所有可能的情况是相同的,我们可以只调用一次 - 按照上面提到的一个条件。

  3. 我想提醒的是,功能应该只返回值。

    require '../core/init.php'; 
    
    $weekday = $_POST['weekbtn']; //Consider adding a sanitization function over here. 
    $weekbtn_allowed_values = array('mon','tue','wed','thu','fri','sat','sun'); 
    if(in_array($weekday, $weekbtn_allowed_values)) { 
        $return = getProduct($weekday); 
        echo json_encode($return); 
    } 
    exit(); 
    
    
    
    function getProduct($weekday) { 
        $data['result_1'] = ''; 
        $preorders = DBPDO::getInstance()->get('standardorder', array(
             array('dayOfWeek','=', "'$weekday'"), 
             array('customerId','=', $_SESSION['customer_id']), 
             array('completed','=', 0) 
           )); 
        foreach ($preorders->results() as $preorder) { 
         $data['result_1'] .= $preorder->imageName; //Why you have those quotes before? 
        } 
    
        return $data['result_1']; 
    } 
    
+0

即使$ data是html,这会是推荐的方式吗? – Elevant

+0

如果是这种类型的输出,我会考虑从函数中'回显',但仍然在'exit()'外面。函数的主要思想是你可能想再次在别处使用它的逻辑。 –

+0

**注意:**如果它是HTML输出 - 为什么要使用'json_encode'呢?你应该编码数据结构,如数组,并使用你的JS来处理HTML操作, –

0

选项1: 解析获得响应后,响应于JSON。 因此,这里是更新后的代码:

$(document).on('click', "input[name=weekbtn]", function(event) { 
     event.preventDefault(); 
     var action = $(this).attr('value'); 
     $.ajax({ 
      type: "POST", 
      url: "php/standingproduct.php", 
      data: { 
       weekbtn: action 
      }, 
      dataType: 'JSON', 
      success: function(data) { 
       data=JSON.parse(data); 
       alert(data.result_1); 
       $("#otheritems").html(data.result_2); 
      } 
     }); 

}); 

选项2:如果您分配的dataType为JSONP则不需要解析响应JSONP :您也可以指定数据类型。

+0

1.通过指定'dataType:“JSON”',jQuery将为你解析它。所以这是行不通的,因为它已经被解析了。 2.该服务正在返回JSON,而不是JSONP。告诉jQuery期望JSONP将完全打破它。 – Quentin