【问题标题】:PUT with jquery returns error使用 jquery 的 PUT 返回错误
【发布时间】:2013-05-21 11:19:45
【问题描述】:

我正在尝试使用一个小的 jquery 脚本更新一个字段,但它不断返回错误,我看不出哪里有问题。

我有一个带有 onclick="reportAd(MyAid)" 的锚点运行这个:

function reportAd(aid) {
   var conf = confirm("Will you report this ad?");

   if(conf == true) {         
      $.ajax({
         url: rootURL + '/reportad/',
         type: 'PUT',
         dataType: 'json',
         contentType: 'application/json',
         data: {'aid': ''+aid+''},
         success: function(data) {
             alert("Ad have been reported");
         },
         error: function(data) {
             console.log(data);
         }
     });
   }
   return false;
}

应该运行这个:

$app->put('/reportad/', function() use ($app, $adverts) {    
   $request = Slim::getInstance()->request();
   $data = json_decode($request->getBody());

   $adverts->report_ad($data->aid);
});

FireBug 给了我这个:

Object { readyState=4, status=200, statusText="OK"}

如果我用 cURL 调用脚本

curl -i -X PUT -H 'Content-Type: application/json' -d '{"aid":"43"}' http://www.domain.dk/reportad/

它有效。

【问题讨论】:

  • rootURL 是否在同一个域中?你的浏览器是什么?
  • rootURL 在同一个域中,是的。 FF 和 Chrome 都给了我同样的错误。
  • 服务器返回什么?它是有效的 JSON 吗?

标签: php jquery html curl put


【解决方案1】:

您要求将答案的内容解析为 JSON。如果不是 JSON,那么您可能会遇到 parseError。

尝试删除dataType 参数。

【讨论】:

  • 删除 dataType 将返回成功,但不会运行我的脚本。
【解决方案2】:

克服对“PUT”缺乏支持的标准方法是使用“POST”并引入伪 PUT 机制,服务器端代码可以在该机制上分支。

例如:

$.ajax({
    type: 'POST',
    data: {method: 'PUT', 'aid': ''+aid+''},
});

您在服务器端做什么取决于您使用的语言/框架。

【讨论】:

  • 现代浏览器不支持 XmlHttpRequest 中的 PUT 方法吗?
  • 我知道支持仍然不完整,至少这是我上次检查的时候。
猜你喜欢
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2019-07-28
  • 2015-07-05
  • 2012-02-03
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多