以下是钛的代码:
var request = Titanium.Network.createHTTPClient();
request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage/"+ bh.userID + "/" + bh.logic.profile.userID);
request.setRequestHeader("enctype", "multipart/form-data");
request.setRequestHeader("Content-Type", "text/json");
request.send(data_to_send);
request.onload = function() {
Ti.API.info(this.responseText);
bh.ui.profile.createWindow();
};
request.onerror = function(){
alert('Error while posting message');
};
以下是WCF的代码:
接口:
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/PostMessage/{userid}/{touserid}",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
int PostMessage(string userid, string touserid, string message);
类别:
public int PostMessage(string userID, string toUserID, string message)
{
MDBDataContext oMDB = new MDBDataContext();
int returnValue = oMDB.PostMessage(Convert.ToInt32(userID), message, Convert.ToInt32(toUserID));
oMDB.Dispose();
return returnValue;
}
查询:如果我将此功能转换为“GET”,那么它的工作效果非常好。但是,使用“POST”我得到错误,我无法弄清楚错误。我也为WCF启用了traceListener,但没有错误。
请帮忙。我被困在这一点上。我正在尝试使用iPhone模拟器。
答案 0 :(得分:4)
最后,我在代码中发现了问题。此解决方案适用于每个客户端技术。
让我们先看看工作代码:
var data_to_send = '{"userid": "' + bh.userID + '", "touserid": "' + bh.logic.profile.userID + '","message": "' + bh.ui.postMessage.txtPost.value + '"}';
var request = Titanium.Network.createHTTPClient();
request.onload = function() {
//Some code here
};
request.onerror = function(){
//Some code here
};
request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage");
request.setRequestHeader("enctype", "multipart/form-data");
request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
request.send(data_to_send);
修正:
希望有所帮助。整点是你认为javascript的正确性对于json来说是不正确的。
答案 1 :(得分:0)
您需要按照正确的顺序设置钛代码。
request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage/"+ bh.userID + "/" + bh.logic.profile.userID);
根据文档,该片段需要在听众(onload,onerror等等)之后和send()
之前。