Jump to content

[SOLVED] Refused to set unsafe header Connection in Safari


mark_nsx

Recommended Posts

Hi guys. I've implemented a simple AJAX request object which works fine in most browsers apart from Safari. The js error console returned this error "Refused to set unsafe header Connection".

Here's the code snippet:

function createRequestObject() {
	var xhr;
	try {
		xhr = new XMLHttpRequest();
	}
	catch (e) {
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xhr;
}

function send() {
	if(!stopped) {
		xhr.open('post', url, true);
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		xhr.onreadystatechange = function() { self.onComplete(); };
		xhr.send(parameters);
	}
}

Does anybody know the fix for this? Cheers! ;D

Link to comment
Share on other sites

/*********
* Javascript for file upload demo
* Copyright (C) Tomas Larsson 2006
* http://tomas.epineer.se/

* Licence:
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
* 
* Software distributed under this License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*/
function PeriodicalAjax(url, parameters, frequency, decay, onSuccess, onFailure) {
function createRequestObject() {
	var xhr;
	try {
		xhr = new XMLHttpRequest();
	}
	catch (e) {
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xhr;
}

function send() {
	if(!stopped) {
		var async = true;
		var browserName = navigator.userAgent.toLowerCase();
		if (browserName.indexOf('safari/') != -1){
			async = false;
		}
		xhr.open('post', url, async);
		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xhr.onreadystatechange = function() { self.onComplete(); };
		xhr.send(parameters);
	}
}

this.stop = function() {
	stopped = true;
	clearTimeout(this.timer);
}

this.start = function() {
	stopped = false;
	this.onTimerEvent();
}

this.onComplete = function() {
	if(this.stopped) return false;
	if ( xhr.readyState == 4) {
		if(xhr.status == 200) {
			if(xhr.responseText == lastResponse) {
				decay = decay * originalDecay;
			} else {
				decay = 1;
			}
			lastResponse = xhr.responseText;
			if(onSuccess instanceof Function) {
				onSuccess(xhr);
			}
			this.timer = setTimeout(function() { self.onTimerEvent(); }, decay * frequency * 1000);
		} else {
			if(onFailure instanceof Function) {
				onFailure(xhr);
			}
		}
	}
}

this.getResponse = function() {
	if(xhr.responseText) {
		return xhr.responseText;
	}
}

this.onTimerEvent = function() {
	send();
}

var self = this;
var stopped = false;
var originalDecay = decay || 1.2;
decay = originalDecay;
var xhr = createRequestObject();
var lastResponse = "";
this.start();
}

function ProgressTracker(sid, options) {

this.onSuccess = function(xhr) {
	if(parseInt(xhr.responseText) >= 100) {
		periodicalAjax.stop();
		if(options.onComplete instanceof Function) {
			options.onComplete();
		}
	} else if(xhr.responseText && xhr.responseText != lastResponse) {
		if(options.onProgressChange instanceof Function) {
			options.onProgressChange(xhr.responseText);
		}
		if(options.progressBar && options.progressBar.style) {
			options.progressBar.style.width = parseInt(xhr.responseText) + "%";
			$('numeric').innerHTML = parseInt(xhr.responseText) + "%";
		}
	}
}

this.onFailure = function(xhr) {
	if(options.onFailure instanceof Function) {
		options.onFailure(xhr.responseText);
	} else {
		alert(xhr.responseText);
	}
	periodicalAjax.stop();
}

var self = this;
var lastResponse = -1;
options = options || {};
var url = options.url || '/videos/progress';
var frequency = options.frequency || 0.5;
var decay = options.decay || 2;
var periodicalAjax = new PeriodicalAjax(url, 'sid=' + sid, frequency, decay, function(request){self.onSuccess(request);},function(request){self.onFailure(request);});
}

function beginUpload(sid) {
      document.postform.submit();
    	var pb = document.getElementById("progress");
    	pb.parentNode.parentNode.style.display='block';
    	new ProgressTracker(sid,{
    		progressBar: pb,
    		onFailure: function(msg) {
    			Element.hide(pb.parentNode);
    			alert(msg);
    		}
    	});
}

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.