【问题标题】:Data not getting saved using JQuery.ajax使用 JQuery.ajax 未保存数据
【发布时间】:2013-05-11 15:39:32
【问题描述】:

我想在单击按钮时从文本框中保存数据。我正在为这个任务使用 JQuery AJAX,如下所示。请注意,我在主题函数中制作了这个标签。

function theme_user_post_block($vars)
{

$themeUserCommentInput ='';

$themeUserCommentInput .= '<textarea id="txt_1"rows="1" cols="50"></textarea>';

$themeUserCommentInput .= '<input type="submit" value="Post Comment" align="center"
class="btnPostComment" id="btn_1" />'
return $themeUserCommentInput;
}

这能够显示页面内的文本框和按钮。现在这是我的 JS 代码:-

(function($) 
{   
Drupal.behaviors.PostComment= { 

 attach: function (context, settings) {
  $('.btnPostComment', context).click(function (event) {
  var post = "&newcomment=Comment1&logid=log1";
  jQuery.ajax({
              url: 'postcomment',
              type: 'POST',
              dataType: 'json',
              data: post,
              success: function (data) { alert(data); },
              error: function(jqXHR, textStatus, errorThrown){alert(textStatus + 
   errorThrown);}
      });               
     });
    }                    
   }
  })(jQuery); 

接下来我创建一个带有 URL 名称的菜单页面,如下所示:-

 function postcomment_menu(){
 $items=array();
  $items['postcomment']=array(
   'title'=>t(''),
   'type'=> MENU_CALLBACK,       
   'page callback' => 'user_comment_post',        
   'access arguments' => array('access content'),
 );
 return $items; 
}

function user_comment_post(){
 global $user;
 $cid =  db_insert('user_comment')
    ->fields(array(     
    'comment_user_id' => $user->uid,
    'reference_id' => $_POST['logid'],      
    'comment_desc'=>$_POST['newcomment'],
    'createdon'=>REQUEST_TIME, 
    ))
    ->execute();
  if($cid!=0)
  {
     //GetUserComments($i);
     drupal_json_output("success");
  }
}

所以我已经完成了 jQuery+Ajax 提交功能所需的所有事情。当我按下“发表评论”按钮时,它会在警报中显示“errorundefined”错误。警报显示为 jQuery.AJAX 函数内部错误的结果。自定义菜单回调也没有被调用。

【问题讨论】:

  • 您的示例代码看起来不正确。即使来自复制粘贴,请确保您显示的代码格式有效,否则我们不知道您遇到的问题是不是因为它。例如,在textareaid 属性txt_1' 中的'&lt;textarea id="txt_1'"rows="1" cols="50"&gt;&lt;/textarea&gt;'; 中有一个额外的' 字符,会弄乱格式。
  • 对不起,我的代码错误。为了简单起见,实际上id中的动态值被替换为静态值。我已经编辑了编码部分。

标签: json jquery drupal drupal-7


【解决方案1】:

将数据作为对象发布...并确保您的帖子 url 正确.. url 看起来不正确

var post = {newcomment: 'Comment1',logid:'log1'};

【讨论】:

  • 我如前所述更改了帖子对象,但它也无法正常工作并在警告框中显示错误。请告诉我为什么帖子网址不正确以及实际应该给出的内容。我忘记了此处在 user_comment_post() 中将 $user 声明为全局,但在实际代码中存在。请不要将其视为缺失。
  • url 是您在服务器中调用的页面或函数的路径.. postcomment 是否带您到服务器端功能..
  • postcomment 是 URL 的路径。你是说我这里需要传递函数名而不是URL?
  • 嗯是的...传递路径/到/你的/函数
  • 我尝试了您的解决方案,但失败了。一定有其他的事情会导致错误。
【解决方案2】:

我解决了这个问题。我不知道解决方案或根本原因是什么,但我最终解决了这个问题。我在我的 jQuery.ajax 函数中添加了一行(async: false),一切正常。请看下面的代码:

jQuery.ajax({ url: '发表评论', 类型:'POST', 数据类型:'json', 异步:假, 数据:发布, 成功:函数(数据){ 警报(数据); }, 错误:函数(jqXHR,textStatus,errorThrown){ 警报(文本状态 + 错误抛出); } });

如果有人知道这条线会做什么,请与我们分享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2010-10-25
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多