2012-05-11 76 views
5

我遇到了codeigniter和JQuery Ajax Post的問題。儘管在服務器端執行成功,Jquery AJAX返回錯誤500

我javscript

 $('.remove').click(function(){ 
     var category=event.target.id; 
     var id=$('input[name=article_id]').val(); 
     var p={}; 
     p['id']=id; 

     $.ajax({ 
      type: "POST", 
      url: "/backend.php/blog/removeCategories", 
      async:true, 
      cache:false, 
      data: {id: id, category: category } 
      }).done(function(msg){ 
       jQuery('#category_list').load('/backend.php/blog/refreshCategories/',p,function(str){}); 
      }); 

我笨的控制器

function removeCategories(){ 
     $id=$_POST['id']; 
     $category_id=$_POST['category']; 

     $this->article->removeCategory($category_id,$id); 
    } 

我不能得到AJAX功能的工作,因爲總是有從服務器接收到錯誤500。儘管firebug返回加載資源時出錯,但函數removeCategories仍然被執行。

+0

您的服務器端沒有做記錄,而它做一些事情,也死了,有一些致命的錯誤。啓用PHP錯誤日誌並注意致命錯誤。 – hakre

回答

3

您的錯誤可能在模型中。使用chrome dev工具包來找出返回的頁面內容。 HTTP CODE 500意味着服務器錯誤,通常是由於PHP內某處的語法問題。

另外, 在你的阿賈克斯調用你應該使用success:error:。如果代碼拋出錯誤,這將允許您停止執行。

你爲什麼打電話backend.php/你不使用index.php

另一種方法是使用​​而不是使用​​,您可以簡單地將控制器的html傳遞回來,然後success: function(data){}將其附加到容器中。這將允許您監視ajax呼叫是否爲error()success()並採取相應措施。

+0

Hi Mike, backend.php是我對CI進行的修改,以便在一次單獨的CI安裝中運行兩個應用程序。 謝謝你,你只是記下了我深入瞭解語法錯誤的代碼。 –

+0

大家好,我已經解決了上述問題。原來我的CI_model是一個問題。 我很樂意分享我如何發現問題,但我目前缺乏發佈答案的聲望。 但是非常感謝你。 Kudos =) –

+0

您如何接受我們的答案,讓您指向正確的方向?因爲它是在模型中,我說你把它給我;) – gorelative

6

通過對data選項進行以下更改,確保正確傳遞數據。

$.ajax({ 
      type: "POST", 
      url: "/backend.php/blog/removeCategories", 
      async:true, 
      cache:false, 
      data: {"id": id, "category": category } 
      }).done(function(msg){ 
       jQuery('#category_list').load('/backend.php/blog/refreshCategories/',p,function(str){}); 
      }); 

您對它進行編碼的方式是將每個鍵值對的關鍵字設置爲該變量的值。

+1

是的,我同意 - 製作這些課程的常見錯誤。也可以使用fiddler來查看服務器返回的內容 - 它大多數proboblay說你需要指定ID - 如果它運行代碼無論如何..那麼你需要陷阱它,因爲它不應該運行,如果它的returingon錯誤500 – ppumkin

+0

它似乎是一個合法的問題。但是,儘管更改了我的變量以及您的建議解決方案,但問題仍然存在。 –

+0

你可以發佈螢火蟲的標題信息,所以我們可以看到你傳遞的數據是否正確傳遞? – marteljn

2

在Codeigniter中,如果您在配置中激活了csrf_protection,它將返回錯誤500!

要解決此問題,您必須發送csrf值。

例子:

$.ajax({ 
      type: "POST", 
      url: "http://example.com", 
      data: { 
       '<?php echo $this->security->get_csrf_token_name(); ?>' : 
       '<?php echo $this->security->get_csrf_hash(); ?>' 
       } 
     }); 
相關問題