Как изменить конструктора ActiveXObject JS?

Проверьте ваш метод update:

public function update(Request $request, $id)
{
    // ...
    return Mock::where($subject, $subject)->update([ // <---------
        $subject => $request['list'], // <-------
    ]);
    // ...
}

В предложениях where первым параметром является имя столбца, а не значение. То же самое относится и к обновлению атрибутов. Проверьте эту строку:

Mock::where($subject, $subject)->/** */

Сделайте это вместо:

Mock::where('subject', $subject)->/** */

Кстати, я не использовал ваш способ получения данных запроса, но в случае, если он возвращает null значения, попробуйте этот подход:

$subject = $request->get('subject');

Наконец, при выполнении операции update результатом является boolean, а не обновленная запись. Итак, если вы ожидаете вернуть обновленный объект, сделайте это вместо:

public function update(Request $request, $id)
{
    Mock::find($id);
    $mock = Mock::where('subject', $subject)->first();
    $mock->update(['subject' => $request->get('list')]);

    return $mock->fresh();
}
5
задан mkoryak 25 April 2009 в 19:21
поделиться

5 ответов

Поскольку ОП опубликовал аналогичный вопрос, и я разместил ответ, который также соответствует этому вопросу, он попросил меня дать ссылку на мой ответ, а не повторять это здесь.

3
ответ дан 14 December 2019 в 19:25
поделиться

Возможно, вы можете попробовать что-то вроде этого:

XMLHttpRequest.prototype.real_open = XMLHttpRequest.prototype.open;

var your_open_method = function(sMethod, sUrl, bAsync, sUser, sPassword) { 
  alert('an XHR request has been made!');
  this.real_open(sMethod, sUrl, bAsync, sUser, sPassword); 
} 

XMLHttpRequest.prototype.open = your_open_method;

Конечно, вместо предупреждения вы можете иметь свое собственное отслеживание код. Я опробовал его, и он работает с «обычными JavaScript-запросами», а также с запросами, сделанными с помощью jquery. Я думаю, что это должно работать независимо от структуры, которая использовалась, чтобы сделать запрос.

РЕДАКТИРОВАТЬ 21 апреля Я действительно не знаю, как можно расширить ActiveXObject. Я предполагаю, что что-то вроде этого должно работать:

XHR = new ActiveXObject("Microsoft.XMLHTTP");
var XHR.prototype.old_open = XHR.prototype.open;
var new_open = function(sMethod, sUrl, bAsync, sUser, sPassword) { 
  alert('an IE XHR request has been made!');
  this.old_open(sMethod, sUrl, bAsync, sUser, sPassword); 
} 

XHR.prototype.open = new_open;

К сожалению (или, возможно, нет), у меня нет IE, поэтому я не могу проверить это. Но попробуй и дай мне знать, все ли получилось.

2
ответ дан 14 December 2019 в 19:25
поделиться

There is nothing "to get at real object" it is the real object!

Sounds like you are looking for something like this guy is doing....

http://www.adobepress.com/articles/article.asp?p=439600

document.write("<script type=\"text/javascript\" src=\"js/HTTP.js\"></script>");

function Ajax()
{
  this.toString = function() { return "Ajax"; }
  this.http = new HTTP();

  this.makeRequest = function(_method, _url, _callbackMethod)
  {
    this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP");
    this.request.onreadystatechange = _callbackMethod;
    this.request.open(_method, _url, true);
    this.request.send(_url);
  }

  this.checkReadyState = function(_id, _1, _2, _3)
  {
    switch(this.request.readyState)
    {
      case 1:
        document.getElementById(_id).innerHTML = _1;
        break;
      case 2:
        document.getElementById(_id).innerHTML = _2;
        break;
      case 3:
        document.getElementById(_id).innerHTML = _3;
        break;
      case 4:
        return this.http.status(this.request.status);
    }
  }
}
1
ответ дан 14 December 2019 в 19:25
поделиться

Это всегда сработало для меня.

var xmlHttp;

function yourajaxfunction(str)
{ 
   xmlHttp=GetXmlHttpObject();
   if (xmlHttp==null){
      alert ("Browser does not support HTTP Request");
      return;
   }

   var url="yourserversidecodefile.php";
   url=url+"?q="+str;

   xmlHttp.onreadystatechange=stateChanged;
   xmlHttp.open("GET", url, true);
   xmlHttp.send(null);
}

function stateChanged() { 
   if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
      document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
   } 
}

function GetXmlHttpObject(){
   var xmlHttp=null;

   try {
      // Firefox, Opera 8.0+, Safari
      xmlHttp=new XMLHttpRequest();
   }
   catch (E1) {
      //Internet Explorer
      try {
         xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (E2) {
         xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
   }

   return xmlHttp;
}
0
ответ дан 14 December 2019 в 19:25
поделиться

Я рекомендую использовать jQuery для AJAX. Это очень маленький, но очень гибкий и быстрый каркас. Проверьте документы здесь .

-1
ответ дан 14 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: