我的jQuery POST请求有什么问题?

时间:2013-11-08 18:07:36

标签: javascript jquery ajax post

我正在尝试通过jQuery对远程服务进行身份验证。首先,我验证我可以在浏览器之外执行此操作:

 curl -X POST -H "Content-Type: application/json" -H "Accept: appliction/json" -d '{"username":"...","password":"..."}' http://example.com/auth

这成功返回一个令牌。

现在我尝试使用jQuery:

$.ajax({
    url: "http://example.com/auth",
    type: "POST",
    dataType: "json",
    contentType: "json",
    data: {username:"...",password:"..."},
    error: function(data){alert(JSON.stringify(data))},
    success: function(data){alert(JSON.stringify(data))}
});

我收到服务器错误(500)。显然我做错了什么。这是我第一次尝试在jQuery中进行POST,所以我不知道如何识别问题所在。我在这里做错了什么?

P.S。如果我已经有一个令牌,我可以通过jQuery成功执行GET请求:

$.ajax({
    url: "http://example.com/stuff?token=f42652adcbfe3ed9d59fae62b5267b8d",
    type: "GET",
    dataType: "json",
    error: function(data){alert(JSON.stringify(data))},
    success: function(data){alert(JSON.stringify(data))}
});

6 个答案:

答案 0 :(得分:3)

我唯一注意到的是数据表示的差异。查看原始请求中的数据:

-d '{"username":"...","password":"..."}'

AJAX请求中的数据:

data: {username:"...",password:"..."}

前者将琴键包裹在琴弦中,而后者则不然。整个事情也应该是一个字符串。尝试:

data: '{"username":"...","password":"..."}'

我相信这一般与JSON formatted data更为一致。如果不将字符串包装在字符串中,它可能是一个JavaScript对象,但它不是JSON数据。

答案 1 :(得分:1)

更新:oops错过了一条评论说stringify没有用。我将此留给后人

有时你需要在发送Json时对数据进行字符串化,否则jquery可能会将对象序列化为param字符串而不是整个对象。这取决于服务器如何将请求查询绑定到对象。虽然。你可以调试服务器请求还是不在你的手中?

尝试做(如果您使用的是半现代浏览器):

   data: JSON.stringify({ your: data}) 

答案 2 :(得分:0)

500内部服务器错误

服务器遇到意外情况,导致无法完成请求。

来自url的Json响应可能是原因,你可以注释stringfy函数并提醒响应。您可以在响应中使用try / catch方法并检查错误。

答案 3 :(得分:0)

谢谢大家的帮助。每一条建议都有助于我找到解决方案。我已在评论中说过,但这是解决方案:

  1. dataType正确列为“json”,但contentType应列为“application / json”。

  2. 内容必须包装在JSON.stringify中。

答案 4 :(得分:0)

你是否从js加载到同一个域发布?如果不是,您需要使用jsonp并确保服务器明确接受您的请求,我相信。

答案 5 :(得分:0)

1)在工具中打开网络(f12)

2)选择" Network"

3)选择错误行

4)打开"身体"在权利方面

5)在标题中,您可以看到错误描述eq。

<title>The parameters dictionary contains a null entry for parameter 'Id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Delete(Int32)' in 'BosCatalog.Controllers.ProductsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.<br>Parameter name: parameters</title>