2011-06-21 18 views
1

我正在使用我發現的用於在旅途中更改文本行(您單擊它並顯示輸入)的腳本。它在沒有對數據庫做任何事情的情況下工作正常,但是當我爲更新添加代碼時,它將更新數據庫,但在提交後不會刷新文本。現在我已經迷失了好幾個小時了,可能我錯過了一些非常基本的東西。內聯文本更改沒有在ajax請求上更新(但在數據庫中發生更改)

我的JS:

$.ajaxSetup({ 
    url: '/ajax/nombreruta.php', 
    type: 'POST', 
    async: false, 
    timeout: 500 
}); 



$('.editable').inlineEdit({ 
    value: $.ajax({ data: { 'action': 'get' } }).responseText, 
    buttons: '', 
    cancelOnBlur: true, 
    save: function(event, data) { 
     var html = $.ajax({ 
      data: { 'action': 'save', 'value': data.value } 
     }).responseText; 

     //alert("id: " + this.id); 

     return html === 'OK' ? true : false; 
    } 
}); 

nombreruta.php:

<?php session_start(); 

$action = isset($_POST) && $_POST['action'] ? $_POST['action'] : 'get'; 
$value = isset($_POST) && $_POST['value'] ? $_POST['value'] : ''; 

include $_SERVER['DOCUMENT_ROOT'] ."/util-funciones.php";//for my db functions 

$cnx=conectar(); 
$sel="select * from ruta where id_ruta='".$_SESSION['ruta']."'"; 

$field=mysql_query($sel, $cnx); 
if($row=mysql_fetch_object($field)){ 
$data = $row->nombre; 
} 

switch ($action) { 

// retrieve data 
case 'get': 
    echo $data; 
    break; 

// save data 
case 'save': 
    if ($value != '') { 


     $sel="update ruta set nombre='".$value."' where id_ruta=".$_SESSION['ruta']; 
     mysql_query($sel,$cnx) or die(mysql_error()); 

     $_SESSION['data'] = $value; 

     echo "OK"; 
    } else { 
     echo "ERROR: no se han recibido valores."; 
    } 
    break; 

// no action 
default: 
    echo "ERROR: no se ha especificado accion."; 
    break; 
} 

螢火蟲讓我發現後,我更新我的文字,它返回OK,我刷新頁面後,就會顯示出更新的文本,但不是之前。我開始思考這種做法太麻煩,但這麼多小時後我覺得我從我的解決方案一步......

編輯:

我使用這個插件:http://yelotofu.com/2009/08/jquery-inline-edit-tutorial/

而我的HTML只是

<span class="editable">Text</span> 
+0

請還包括你的HTML。 –

+0

和你正在使用的插件 –

回答

1

您的代碼工作正常,我....

這裏的演示程序我放在一起(asp.net,但是基本上SA我減去數據庫)。

只是要清楚:按Enter鍵保存。點擊取消(因爲你刪除了按鈕)。

HTML

<html> 
    <head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" ></script> 
    <script type="text/javascript" src="https://raw.github.com/caphun/jquery.inlineedit/master/jquery.inlineedit.js"></script> 
    <script type="text/javascript"> 
     $(function(){ 
      $.ajaxSetup({ 
       url: 'Test.ashx?' + window.location.search.substring(1), 
       type: 'POST', 
       async: false, 
       timeout: 500 
      }); 

      $('.editable').inlineEdit({ 
       value: $.ajax({ data: { 'action': 'get'} }).responseText, 
       buttons: '', 
       cancelOnBlur: true, 
       save: function (event, data) { 
        var html = $.ajax({ 
         data: { 'action': 'save', 'value': data.value } 
        }).responseText; 
        return html === 'OK' ? true : false; 
       } 
      }); 
     }); 
    </script> 
    </head> 
    <body> 
    <span class="editable">Test 1</span> 
    </body> 
</html>  

C#

public void ProcessRequest(HttpContext context) 
{ 
    //Custom Object to Get and Format my Connection String from the URL 
    QueryStringObjects QSO = new QueryStringObjects(context.Request, "InlineAjaxTest"); 

    //Look for any GET or POST params named 'action' 
    switch (context.Request.Params["action"]) 
    { 
     //If 'action' = 'save' then.... 
     case "save": 
      //Open a connection to my database (This is a custom Database object) 
      using (DataBrokerSql SQL = GetDataBroker(QSO.Connstring)) 
      { 
       //Create a SQL parameter for the value of the text box 
       DbParameter[] Params = { 
        new SqlParameter("@val", context.Request.Params["value"]) 
       }; 
       //Execute an Insert or Update 
       SQL.ExecSQL(@"UPDATE 
            Test_InlineAJAX 
           SET 
            Value = @val 
           IF @@ROWCOUNT=0 
            INSERT INTO 
            Test_InlineAJAX 
            VALUES 
            (@val)", Params); 

      } 
      //Return OK to the browser 
      context.Response.Write("OK"); 
      break; 
     default: 
      //Open a connection to my database 
      using (DataBrokerSql SQL = GetDataBroker(QSO.Connstring)) 
      { 
       //Get Value from my table (there's only one row so no need to filter) 
       object obj = SQL.GetScalar("Select Value From Test_InlineAJAX"); 
       //If my value is null return "" if not return the value of the object 
       context.Response.Write(obj != null ? obj.ToString() : ""); 
      } 
      break; 
    } 
} 

SQL

CREATE TABLE [dbo].[Test_InlineAJAX](
    [Value] [varchar](255) NULL 
) ON [PRIMARY] 

不知道還有什麼要告訴你,但也許小號這裏的東西會給你一個想法...

+0

我使用我使用的插件編輯了我的問題 –

+0

對不起,但我沒有看到我的代碼中可能會犯我的錯誤:S這是我第一次看到asp。它在沒有數據庫連接的情況下也可以工作,我需要在更改文本後查看當我開始更新數據庫時出現的問題。 –

+0

我修改了我的代碼以保存到數據庫中(我也爲C#代碼添加了一些解釋),但它仍然正常工作。我沒有很好地閱讀PHP,但似乎沒有任何看起來會導致錯誤的主要事情。也許確保你的jQuery版本是最新的...?除此之外,我認爲我沒有想法。對不起,我不能提供更好的幫助。祝你好運! –

相關問題