7


I deployed an App SharePoint hosted.
I am using SP.RequestExecutor and it is working fine on SharePoint premise.
but on SharePoint online it is not working.
I added the library using this: $.getScript("/_layouts/15/SP.RequestExecutor.js");
Can I use that library also in SharePoint online?

This is my CODE :

var createitem = new SP.RequestExecutor("/");
createitem.executeAsync({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/GetByTitle('MyList')/items('" + id + "')/AttachmentFiles/add(FileName='" + file.name + "')",
    method: "POST",
    binaryStringRequestBody: true,
    body: contents2,
    success: function (data) {
        //OK
    },
    error: function (msg) {
        alert("error");
    },
    state: "Update"
});
8
  • What error are you receiving when it fails?
    – wjervis
    Apr 18, 2014 at 13:56
  • Nothing, I try to access to the msg.body, msg.status but they are undefined
    – Nk SP
    Apr 18, 2014 at 13:59
  • Where does it fail? The new SP.RequestExecutor("/"); or the createitem.executeAsync({...?
    – wjervis
    Apr 18, 2014 at 14:03
  • It fails in the executeAsync, I can see the alert in the error callback.
    – Nk SP
    Apr 18, 2014 at 14:05
  • I'm looking at a SP hosted app I have working for SPO, and I'm using the app web url to create the SP.RequestExecutor. My REST url is quite different as well: appweburl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Communication%20Log')/items?$select=Title,Date1&$orderby=Date1 desc&$top=5&@target='" + encodeURIComponent(hostweburl) + "'" hostweburl being the url for the sharepoint online site, appweburl being the app's url.
    – wjervis
    Apr 18, 2014 at 14:06

1 Answer 1

6

I used this when I first created my app. First, you need both the app web url and the host web url:

var hostweburl = decodeURIComponent( getQueryStringParameter("SPHostUrl") );
var appweburl = decodeURIComponent( getQueryStringParameter("SPAppWebUrl") );

Then you need to load the SP.RequestExecutor.JS file, which I did differently than what was in the link:

var scriptbase = hostweburl + "/_layouts/15/";

$.getScript(scriptbase + "SP.Runtime.js",
    function () {
        $.getScript(scriptbase + "SP.js",
            function () { $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest); }
        );
    }
);

execCrossDomainRequest is the function in which I executed the cross domain request. In my function, I was retrieving the five most recent items from a list called "Communication Log":

function execCrossDomainRequest() {
    var context;
    var factory;
    var appContextSite;

    context = new SP.ClientContext(appweburl);
    factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
    context.set_webRequestExecutorFactory(factory);
    appContextSite = new SP.AppContextSite(context, hostweburl);

    var executor = new SP.RequestExecutor(appweburl);

    executor.executeAsync(
        {
            url:
                appweburl +
                    "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Communication%20Log')/items?$select=Title,Date1&$orderby=Date1 desc&$top=5&@target='" +
                        encodeURIComponent(hostweburl) + "'",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: successHandler,
            error: errorHandler
        }
    );
}

I'm sure you can piece the rest together. This was done when I was fairly fresh with both SharePoint apps and javascript, so it may be improved.

11
  • Thanks, I changed my url request (added @target).It is working fine on-premise, but it is not working on Online :/
    – Nk SP
    Apr 23, 2014 at 8:20
  • I created new SP.RequestExecutor("/") but it needs the appweburl parameter. Strange that it was working on-premise. Thanks
    – Nk SP
    Apr 23, 2014 at 9:14
  • Why in your function you created context, factory and appContextSite instances when you didnt use them anywhere?
    – michalh
    May 26, 2017 at 11:48
  • @MichalHainc See the last comment under the code block. I suppose I ought to update this answer when I have a chance.
    – wjervis
    May 26, 2017 at 12:17
  • @wjervis Would be helpfull ... Im struggling with this for 2 days, I'd like to use the appContextSite & context objects to work with the JSOM and manipulate data on the hostWeb but all I am getting is Access denied
    – michalh
    May 26, 2017 at 12:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.