2012-05-20 32 views
3

我知道人們爲什麼我不使用可能會得到真正的困惑,但我感覺好多了使用PHP因此我把它撿起。我基本上試圖創建一個非常簡單的backbone.js。我已經預定義了urlRooturl函數。我編寫的PHP只是簡單地給我回復一條消息(使用echo)。Backbone.js的:保存方法總是返回錯誤回調

但無論我做什麼,只要我嘗試收到迴應,它總是會回到錯誤回調。我得到responseText作爲迴應,但是我仍然不明白爲什麼會觸發錯誤回調。這裏是我的完整html和後端php代碼。爲什麼總是會出現錯誤回調?我還想說明我收到標題

HTTP/1.1 200 OK

HTML(也與Backbone.js裏面);

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script> 
    <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min.js"></script> 
    <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script> 
</head> 
<body> 
<div id='place'> 
    <input id='clicker' type='button' value='Click Me'/> 
</div> 
<script type='text/javascript'> 
(function($){ 
    Backbone.emulateHTTP=true; 
    Backbone.emulateJSON=true; 
    var URL=Backbone.Model.extend({ 
     initialize:function(){ 
      console.log("URL object has been created"); 
     }, 
     defaults:{ 
      url:'not actually defined' 
     }, 
     urlRoot:'/StupidExample/server.php', 
     url:function(){ 
      var base=this.urlRoot || (this.collection && this.collection.url) || "/"; 
      if(this.isNew()) return base; 

      return base+"?id="+encodeURIComponent(this.id); 
     } 
    }); 

    var URLView=Backbone.View.extend({ 
     initialize:function(){ 
      console.log('URL View has been created'); 
     }, 
     el:('#place'), 
     events:{ 
      "click #clicker":"alerter" 
     }, 
     alerter:function(){ 
      console.log("I've been clicked"); 
      var obj=new URL(); 
      obj.save(obj.toJSON,{ 
      success:function(){ 
       console.log("Success") 
      }, 
      error:function(model,response,xhr){ 
       console.log(model); 
       console.log(response); 
       console.log(xhr); 
       console.log("Error"); 
      } 
      }); 
     } 
    }); 

    var urlView=new URLView(); 
})(jQuery); 
</script> 
</body> 
</html> 

PHP;

<?php 
echo "I've received something"; 
?> 

回答

11

您必須返回一個有效的JSON對象與你HTTP 200響應。骨幹在您的echo返回值上拋出一個錯誤,因爲它試圖將響應解析爲JSON,失敗。

+0

在我的使用情況下,我的服務器發送一個CSV文件中的一個,我可以繞過這使我能得到成功的回調csv文件。提前致謝。 – Trying

+0

@Try你總是可以恢復到古老的jQuery'ajax'方法。無論如何,這就是Backbone所使用的。 – benjaminz

1

正如德里克說,你需要改變你的PHP文件返回JSON,你可以這樣做:

<?php print json_encode(array('response' => 'success')); 

但你還需要不使用絕對路徑,爲您的網址,因爲AJAX是不能跨不允許因此它需要是相對的。