Как сделать междоменный http запрос на получение с использованием JavaScript? - PullRequest
3 голосов
/ 04 октября 2011

Я пытаюсь реализовать функциональность смс в Dynamics CRM 2011. Я создал для этого пользовательское действие и добавил кнопку в форму SMS.При нажатии на кнопку должна быть отправлена ​​смс.

Мне нужно сделать http-запрос для этого и передать несколько параметров.Вот код сработал:

function send() {
var mygetrequest = new ajaxRequest()
mygetrequest.onreadystatechange = function () {
    if (mygetrequest.readyState == 4) {
        if (mygetrequest.status == 200 || window.location.href.indexOf("http") == -1) {
            //document.getElementById("result").innerHTML = mygetrequest.responseText
            alert(mygetrequest.responseText);
        }
        else {
            alert("An error has occured making the request")
        }
    }
}
var nichandle = "MT-1234";
var hash = "md5";
var passphrase = "[encryptedpassphrase]";
var number = "32497123456";
var content = "testing sms service";

mygetrequest.open("GET", "http://api.smsaction.be/push/?nichandle=" + nichandle + "&hash=" + hash + "&passphrase=" + passphrase + "&number=" + number + "&content=" + content, true)
mygetrequest.send(null)
}

function ajaxRequest() {
    var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
    if (window.ActiveXObject) { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
        for (var i = 0; i < activexmodes.length; i++) {
            try {
                return new ActiveXObject(activexmodes[i])
            }
            catch (e) {
                //suppress error
            }
        }
    }
    else if (window.XMLHttpRequest) // if Mozilla, Safari etc
        return new XMLHttpRequest()
    else
        return false
}

Я получаю «ошибка доступа запрещена» в строке:

mygetrequest.open("GET", "http://api.smsaction.be/push/?nichandle=" ......

Любая помощь приветствуется.

Ответы [ 4 ]

4 голосов
/ 04 октября 2011

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

Вам следует связаться с smsaction.be или проверить их часто задаваемые вопросы, чтобы узнать, есть ли у них какая-либо реализация.

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

Хороший способ преодолеть это - использовать собственный сайт в качестве прокси. Выполните запросы AJAX для скрипта на вашей стороне, и позвольте ему выполнить вызов. В примере PHP вы можете использовать cURL

1 голос
/ 04 октября 2011

Ваши AJAX-запросы по умолчанию не будут выполняться из-за единой политики происхождения.

http://en.wikipedia.org/wiki/Same_origin_policy

Современные методы позволяют использовать CORS (см. Статью Николаса) http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

AJAX JQuery позволяет CORS.

Другой способ сделать это - получить содержимое, динамически сгенерировать элемент сценария и выполнить insertBefore для head.firstchild (см. Строку исходного кода jQuery 1.6.4 №: 7833). Код Google Analytics делает нечто похожее на:Что ж.Возможно, вы тоже захотите взглянуть на это.

Приветствия .. Сри

1 голос
/ 04 октября 2011

Полагаю, SMS-сервис находится в другом домене.Если это так, вы не можете сделать AJAX-вызов на него, потому что это нарушает ту же политику происхождения.В основном у вас есть два варианта:

  1. Выполнить отправку SMS на стороне сервера
  2. Использовать JSONP

Такженеужели парольная фраза и другие секреты видны в HTML?Что мешает людям красть его и использовать в своих целях?

0 голосов
/ 04 октября 2011

Например, при запросе из другого домена ошибка:

XMLHttpRequest не может загрузить http://api.smsaction.be/push/?nichandle=??????&hash=?????&passphrase=[???????????]&number=????????????&content=???????????????. Источник http://server не разрешен Access-Control-Allow-Origin.

Для междоменных запросов XMLHttp-запросы конечный сервер должен отправить Access-Control-Allow-Origin заголовок ответа.

MDN: https://developer.mozilla.org/en/http_access_control

...