jQuery AJAX表单不发送

时间:2011-08-14 13:35:52

标签: jquery ajax json

为什么这些数据不会发送到我的控制器?在firebug中没有jsonForm的迹象。没有成功警报。

JS

$('form').submit(function() {

  var title = $('#title:input').val();

  alert(title);

  var urlsStr = $("#links").val();
  var urls = urlsStr.match(/\bhttps?:\/\/[^\s]+/gi);
  var formData = {
    "title": title,
    "urls": urls
  }
  var jsonForm = JSON.stringify(formData);                

  $.ajax({
    type: 'GET',
    dataType: 'json',
    cache: false,
    data: { jsonForm: jsonForm },
    url: 'publishlinks/publish',
    success:
      function(response) {
        alert('winrar');
      }
    })
})

控制器

function publish() {

  $form = $this->input->get('jsonForm');

  echo json_decode($form);

  $data = array(

  'movieid' => $this->input->post('id')

  );

  $this->load->model('publish_model');
  $this->publish_model->add_record($data);
  $this->load->model('NewsFeed_model');
  $feed['queryMovies'] = $this->NewsFeed_model->getPublications();        
  $this->load->view('news_feed_view', $feed);     

}

2 个答案:

答案 0 :(得分:1)

不要忘记分号。它们可能很重要。并且,dataType请求中的ajax是指从请求返回的数据,而不是请求发送的数据。

首先修改你的ajax:

$('form').submit(function(e) {
    e.preventDefault();

    var title = $('#title:input').val();

    alert(title);

    var urlsStr = $("#links").val();
    var urls = urlsStr.match(/\bhttps?:\/\/[^\s]+/gi);
    var formData = {
       title: title,
        urls: urls
    };                

  $.ajax({
    type: 'GET',
    cache: false,
    data: formData,
    url: 'publishlinks/publish',
    success:
      function(response) {
        alert('winrar');
      }
   });
});

您的数据将作为查询字符串附加,然后您的控制器可以接收该字符串。来自documentation

  

数据选项可以包含形式为key1 = value1& key2 = value2的查询字符串,或者包含{key1:'value1',key2:'value2'}形式的地图。如果使用后一种形式,则在发送之前使用jQuery.param()将数据转换为查询字符串。

修改您的控制器以获取查询字符串变量。

这是一个小提琴:http://jsfiddle.net/jensbits/2F4kN/

答案 1 :(得分:0)

你不打算这样做:url: '/publishlinks/publish',有相对路径吗?您还可以向ajax函数添加失败回调:http://api.jquery.com/jQuery.ajax/

另外,您应该添加return false;添加$('form').submit(function() {函数的末尾,以防止以“正常”方式提交表单。

或使用:

$('form').submit(function(e)

e.preventDefault();
e.stopPropagtion();