【问题标题】:Managing strings with ajax post request and jquery使用 ajax 发布请求和 jquery 管理字符串
【发布时间】:2012-06-14 00:49:45
【问题描述】:

我正在为网站进行基于复选框的过滤操作。这有多个复选框可以过滤不同参数的记录列表。类似于 here 所做的事情。现在我已经取得了一些成功,并且我已经根据第一组复选框过滤了记录。这是它的js函数。

HTML:

<input type="checkbox" id="checkbox1" class="checkbox1" value="<?php echo $suburb['suburb_name']?>" name="Suburb_check[]" onClick="changeResults();" onChange="" >

Javascript:

function changeResults(){
    var data = { 'venue[]' : []};
        $("input[name=Suburb_check[]]:checked").each(function() {                           var chck1 = $(this).val();
                data['venue[]'].push($(this).val());
                dataString =data['venue[]'.toString()].toString();
        });

    $.ajax({
   type : 'POST',
   url : 'process.php',
   data : "dataString="+dataString,
   success : function(data){
                 $('#project_section').html(data); 
        }  
    }); 
}

这样做是过滤记录+加载第二组复选框。第一组复选框)=>用于区域,第二个是=>地区 我创建了一个数组来传递复选框值,然后将其转换为字符串(.toString)并传递给 .php 文件。

同样,我为第二组复选框创建了一个函数。 HTML

<input type="checkbox" onClick="changeLocality();" id="localityCheck" value="<?php echo $locality['locality_name'];?>" name="Locality_check[]">

JS

function changeLocality(){  
    var dataLocality = {'locality[]' : []};         
        $("input[name=Locality_check[]]:checked").each(function() {         
        var chcklocal = $(this).val();              
        dataLocality['locality[]'].push($(this).val());
            localityString =dataLocality['locality[]'.toString()].toString();

        });

 $.ajax({
 type : 'POST',
 url : 'processLocality.php',
 data : "localityString="+localityString,
 success : function(dataLocality){
          $('#project_section').html(dataLocality);        // replace the contents coming from php file      
        }  
    });
}

将值传递给 php 文件,但是当我尝试使用 $_POST 获取它们时,我得到的字符串相互混合,即区域值进入位置字符串,反之亦然(使用具有相同结果的数组进行了尝试,因此切换到字符串)。 我无法解决这个问题。为什么会这样 这是我将值发布到的 php 文件。 processLocality.php

<?php session_start();
include_once("includes/classes/db_connect.php");
include_once("pagination/paginator.class.php");
$pages = new Paginator();

$regions = "'".$_POST['dataString']."'";
echo $regions;
$arr = explode(",",$regions);
$getFormatedSuburb = implode("','",$arr);

$locality = "'".$_POST['localityString']."'";
echo $locality;
$arrLocal = explode(",",$locality);
$getFormatedLocality = implode("','",$arrLocal);

//Here I get the strings mixed with each other!!
 ?>

我在字符串中添加了一些表达式,以便以所需的格式将其传递给 SQL 查询的 IN 子句。 现在我得到的字符串包含来自区域和地方的值。我想要分别,因为它们是两个不同的过滤记录的参数

        Pune East,
        Pune West,        //1 and 2 are regions
         Aundh,
         Kalyaninagar     //3 and 4 are localities

另外,我想知道我的方法是否正确。有更好的方法来实现这一点吗? 任何帮助表示赞赏。
谢谢

【问题讨论】:

  • 简化代码并隔离问题 - 没有人会经历这么多代码。
  • @Repox 感谢您的意见!添加详细信息的原因是我想确保我的观点非常清楚。我已经更新了问题。希望反对票通过这个!!

标签: php jquery mysql ajax


【解决方案1】:

尝试更改您的选择器。而不是这个:

$("input[name=Suburb_check[]]:checked")
....
$("input[name=Locality_check[]]:checked")

这样做:

$("input[name=Suburb_check]:checked")
....
$("input[name=Locality_check]:checked")

标记也必须采用以下形式:

<input type="checkbox" name="Suburb_check">

每个复选框组具有相同的名称。名称不能包含“[]”

【讨论】:

  • 这并不能真正解决问题,而且由于我们不知道 HTML 是什么样子,因此无法判断当前选择器是否正确。
  • @JamWaffles 用 HTML 更新了问题!
  • 更新了答案。您的标记名称属性中不能有“[]”
  • @endoalir 我们不是在 PHP 中传递复选框数组时添加“[]”吗?感谢您的回答!!赞成并接受!
  • 不,这是一个容易犯的错误 sachin :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2011-07-16
  • 2013-06-06
  • 2017-07-23
  • 2011-06-02
相关资源
最近更新 更多