Ajax jquery <a> to update database</a>

时间:2009-10-14 21:08:01

标签: ajax jquery

我有一个输出此html的view_mine_and_others.php文件

<div class="rec" id="1">
 <div class="val">343</div>
 <a class="change">Change</a>
</div>
<div class="rec" id="2">
 <div class="val">12001</div>
 <a class="change">Change</a>
</div>
<div class="rec" id="3">
 <div class="val">4233</div>
 <a class="change">Change</a>
</div>

我将链接(<a class="change">)绑定到js函数function change(),该函数读取所涉及记录的id and val,并注意将此数据发送到{{1}脚本。

update.php

$("a.change").click(change); function change(){ var id = $(this).parent().attr('id'); var val = $(this).siblings('.val').html(); /* this I'm guessing is where I call the ajax code */ /* I then have some code here to udpate the interface if successful * } 将检查用户是否有权进行此更改,如果是,则会进行更改。它还将update.php设置为成功指标。这个$success = 0 or 1不会以任何方式返回,因为它不是函数,它只是我在更新脚本中可以在需要时使用的内部变量。

  • 如何进行ajax调用,以便获得是否允许更新($success)($success=1 in update.php)的反馈。我将使用该反馈以不同方式更新界面。

额外信息:

  • 请注意,我选择不使用表单:)只使用success = 0 in update.php

  • update.php脚本需要<a>$_POST['id'](我不会在这里发布update.php的代码,因为它不是重点,我敢肯定你可以想象它的样子和它的作用)

3 个答案:

答案 0 :(得分:2)

与Karim79类似的情况

我这样做:

<强>的Javascript

function change(){
   var id = $(this).parent().attr('id'); 
   var val = $(this).siblings('.val').html();

   $.ajax({
       url: 'view_mine_and_others.php',
       dataType:"json",
       type: 'POST',
       data: 'id=' + id + '&val=' + val,
       success: function(resp) {
           if($.isFunction(resp.successFunction)) {
               successFunction.apply();
           } else if($.isFunction(resp.failureFunction)){
               failureFunction.apply();
           }
       }
   });
}

<强> PHP

$id=$_POST["id"];
$val=$_POST["val"];
//Do something with these variables
if($success==1){
  echo '{successFunction:function(){
      updateSuccessful();
        }}';
}else{
  echo '{successFunction:function(){
      updateFailed();
        }}';
}

然后再次使用javascript

function updateSuccessful(){
  //do something because the server returned a success
}

function updateFailed(){
  //do something else because the server returned a failure
}

当然,你在javascript中不需要额外的“updateSuccessful”和“updateFailed”函数, 因为,您可以封装这些函数在从PHP返回的函数中执行的任何操作

所以不要在PHP中这样做

echo '{successFunction:function(){
          updateSuccessful();
      }}';

你可以做到

echo '{successFunction:function(){
    //do something because the operation was successful
      }}';

PHP代码中的一种javascript代码....

答案 1 :(得分:2)

以下是快速破解,因为上述解决方案似乎错过了几个步骤,并且此代码处理清理您的$ _POST数据并且可能稍微容易理解:

<强> JAVASCRIPT:

function change() {
   var id = $(this).parent().attr('id'); 
   var val = $(this).siblings('.val').html();

   $.post('/view_mine_and_others.php', { id: id, val: val }, function(data) {
      if (data == '1') {
         alert('success');
      } else {
         alert('error');
      }
   });
   // you MUST return false or the A button will still fire the click event
   return false;
}

<强> PHP:

// assumes both id and val are integer values (sanitizes data)
$id   = (isset($_POST["id"])) ? (int) $_POST['id'] : null;
$val  = (isset($_POST['val'])) ? (int) $_POST['val'] : null;

// do your database work here
// and assume that you create a variable
// called $success which is either true or false
// depending on if the update was successful

// echo the response to be picked up by the AJAX request
echo ($success) ? 1 : 0;
die;

答案 2 :(得分:0)

将该成功变量的值作为Ajax脚本的输出发出,并检查Ajax回调中的值。