【问题标题】:Ajax - Bad request to Restfull apiAjax - 对 Restful api 的错误请求
【发布时间】:2014-11-29 23:35:10
【问题描述】:

我需要向我根据教程创建的rest api发出请求,并且我对/register有这个能力:

URL     /register
Method  POST
Params  name, email, password

我写了这个ajax请求:

$(function() { 
    $('#createPin').click(function(e) { 
        e.preventDefault();

 var reg= { "email":"mile@gmail.com", "name":"Mile","password": "facebook" }      
var urlAjax = "http://www.agroagro.com/test/v1/register";

$.ajax({
type: "POST",
url: urlAjax,
contentType: "application/json",
data: JSON.stringify(reg),
  crossDomain:true, 
  success: function(data) { alert("ajax worked"); },
error: function(data) {console.log(data); },
dataType: 'html',
beforeSend: function (xhr) {
            xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
        },
        headers: {
            'Access-Control-Allow-Origin': '*'
        }
});


}); 
});

我也尝试过:data: reg,,但在这两种情况下我都得到了:

 POST http://agroagro.com/test/v1/register 400 (Bad Request)

和:

XHR finished loading: POST "http://agroagro.com/test/v1/register".jquery-latest.min.js:4 sendjquery-latest.min.js:4 m.extend.ajaxtest.html:115 (anonymous function)jquery-latest.min.js:3 m.event.dispatchjquery-latest.min.js:3 r.handle
test.html:122 Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}abort: function (a){var b=a||u;return i&&i.abort(b),x(0,b),this}always: function (){return e.done(arguments).fail(arguments),this}complete: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}done: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}error: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}fail: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}getAllResponseHeaders: function (){return 2===t?f:null}getResponseHeader: function (a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b}overrideMimeType: function (a){return t||(k.mimeType=a),this}pipe: function (){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()}progress: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}promise: function (a){return null!=a?m.extend(a,d):d}readyState: 4responseText: "{"error":true,"message":"Required field(s) name, email, password is missing or empty"}"setRequestHeader: function (a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this}state: function (){return c}status: 400statusCode: function (a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this}statusText: "Bad Request"success: function (){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this}then: function (){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()}__proto__: Object

为什么有什么问题......也/register不需要认证。如何正确添加ajax请求? 我尝试使用Chrome Advanced REST client extension 提出请求,一切都很好。

使用 Chrome 高级 REST 客户端:http://i.imgur.com/Ms0oBK9.png - 一切正常。我的 ajax 请求有什么问题?

更新: 我也试试:

data: JSON.stringify({
                    name: "Mile2",
                    email: "new@new.com",
                    password: "facebook"
                }),

dataType: 'text', 

但又是错误的请求

【问题讨论】:

  • 我也尝试使用:contentType:“application/x-www-form-urlencoded”,但不再工作...请帮助,如果使用 Chrome 扩展程序,我看不出不能工作的原因使用 ajax 请求

标签: jquery ajax rest slim bad-request


【解决方案1】:

请确保服务器支持 POST 方法的跨域通信。 CORS Documentation

【讨论】:

  • 是的,支持...问题是 contentType: "application/json",在我更改为 application/x-www-form-urlencoded 后一切正常...现在我有新问题了当我使用 Chrome Advanced Rest Client 时,代码可以跨域工作,但当我从不同域发出 ajax 请求时无法工作......可能是什么问题?
  • Rest Client 没有使用 ajax 进行通信,但您的代码使用了。这意味着您的服务器不允许使用 POST 方法进行跨域通信。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多