2011-05-20 109 views
1

我想提交一個表格在sencha觸摸框架中使用ajax。這是一個簡單的形式,要求用戶的姓名,電子郵件地址和簡短的信息。然後我想將這些數據發佈到一個php腳本,只需將數據發送給我即可。與sencha觸摸ajax問題

我的問題是,當我試圖提交我得到以下錯誤的形式: 「語法錯誤:無法解析JSON字符串」

代碼發送請求如下:

var userName = name.getValue(); 
var userEmail = email.getValue(); 
var userMessage = message.getValue(); 
Ext.Ajax.request({ 
    url:'path/to/phpfile.php', 
    jsonData:{"name":userName, "email":userEmail, "message":userMessage}, 
    method:"POST", 
    success:function(){ 
     alert("Success!"); 
    }, 
    failure:function(){ 
     alert("Error"); 
    } 
}); 
在上線14583的煎茶觸摸框架,這是

Ext.util.JSON = { 
    encode: function(o){ 
     return JSON.stringify(0); 
    }, 
    decode: function(s){ 
     return JSON.parse(s); //this is line 14583 
    } 
}; 

我剛開始學習分機和煎茶觸摸因此可能發生

錯誤有人請在這裏指出正確的方向?任何線程/教程/例子將不勝感激。

在此先感謝

+0

得到了任何堆棧跟蹤? – user123444555621 2011-05-20 18:33:30

+0

你能捕捉從服務器回來的json嗎? – ballmw 2011-05-20 18:51:20

+0

@ballmw據我可以告訴請求永遠不會讓它到服務器 – heymrcarter 2011-05-20 19:02:42

回答

0

如果你改變了Ajax請求下面會發生什麼。

Ext.Ajax.request({ 
     url: 'php/file.php', 
     method: 'post', 
     params: { id: idvar, data1: Ext.encode(schouw), data2: Ext.encode(opmerkingen) }, 
     success: function(response) { 
      //Reponse 
    } 
}); 

在我自己的應用程序中,直接將數據編碼爲JSON效果很好。

你確定你發送的var是否填滿了數據?在我的應用程序中,我使用下面的代碼來減去輸入值中的數據(略有不同);

formID.getValues().inputFieldID 
1

也許你的服務器使用內容協商。在這種情況下,它遵守請求標頭參數接受,這就是你的情況下的Accept: */*。所以服務器發送你的腳本HTML或XML,它們不能被讀作JSON。

更改您的代碼如下:

Ext.Ajax.setDefaultHeaders({ 
    'Accept': 'application/json' 
}); 
Ext.Ajax.request({ 
    url:'path/to/phpfile.php', 
    params:{"name":userName, "email":userEmail, "message":userMessage}, 
    method:"POST", 
    success:function(){ 
     alert("Success!"); 
    }, 
    failure:function(){ 
     alert("Error"); 
    } 
}); 

來源:http://www.sencha.com/learn/legacy/Manual:RESTful_Web_Services