我正在使用谷歌Volley library来处理我的应用程序网络。
我的后端是一个带有Laravel 4的apache服务器。当我尝试使用JsonObjectRequest发出POST请求时,我得到一个空的$_POST
数组。
我能够使用此处描述的方法解决它:Volley JsonObjectRequest Post request not working
但它似乎是对象不是很复杂的简单情况的解决方案。 另外,我想使用Gson和自定义GsonRequest,但它也会出现同样的问题。
对我来说奇怪的是,php,特别是Laravel不知道如何处理JSON请求,因为这是一个REST框架,我错过了什么?有没有更好的方法来解决它?
答案 0 :(得分:0)
嗯,显然解决方案非常简单,只需要深入了解文档:)
http://laravel.com/docs/requests
特别是这个注意:
某些JavaScript库(如Backbone)可能会将输入作为JSON发送到应用程序。您可以通过Input :: get正常访问此数据。
答案 1 :(得分:0)
这就是我解决它的方式。下面是我创建的扩展类的自定义类。参数以Map
的形式提供public class CustomJsonRequest extends Request {
Map<String, String> params;
private Response.Listener listener;
public CustomJsonRequest(int requestMethod, String url, Map<String, String> params,
Response.Listener responseListener, Response.ErrorListener errorListener) {
super(requestMethod, url, errorListener);
this.params = params;
this.listener = responseListener;
}
@Override
protected void deliverResponse(Object response) {
listener.onResponse(response);
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
return params;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
你可以提供pama作为
Map<String, String> params = new HashMap<String, String>();
params.put("email", email.getText().toString());
params.put("password", password.getText().toString());
使用此功能,您可以在api中使用GET或POST动词。
答案 2 :(得分:0)
使用此$_REQUEST
NOT $_POST
:D