Вызовы Javascript window.location теряются?

У меня проблемы с кодом. У меня есть функция, которая делает некоторые вещи с некоторыми данными, вызывает удаленную систему (активирует скрипт в этой системе и передает данные), а затем делает еще один вызов в ту же систему, чтобы активировать другой скрипт (который действует на данные сохранено выше). Проблема в том, что первый вызов удаленной системы теряется при выполнении.

Это запускается в Safari, использует jquery; функция привязана к нажатию кнопки, которая определена в коде javascript с функцией onclick (т.е. она не определена в определении кнопки html).

Вот примерное описание функции (очищено для просмотра — надеюсь, я оставил достаточно, чтобы было понятно):

function compareJSON() {
    // loop through the objects, testing and changing data
    //  ...

    dataSession=({ //build object for output    });   

    $.each( dataSession.chapters , function( indexC, value ) {  
        //compare objects to some others, testing and changing data
    });

    //  ...

    //Call remote script on other system
    urlString="url://blah.dee.com/Blar?script=SaveJSON&$JSONobject=";
    window.location= urlString + JSON.stringify(dataSession);

   //Call remote script on other system
   window.location="url://blah.dee.com/Blar?script=EditJSON";
}

Последние три строки кода — это два вызова. Он использует window.location для запуска удаленной системы, передавая данные через URL-адрес. Но мне нужны ОБА сценария для вызова и запуска. Похоже, что запускается только ПОСЛЕДНИЙ сценарий в последовательности. Если я поменяю их местами, останется то, что на последнем месте.

Есть ли что-то в window.location, что на самом деле не обрабатывается до конца функции?

Этот сценарий на самом деле представлял собой серию отдельных вызовов функций, но я полагал, что запускаю асинхронное выполнение, из-за которого различные вызовы сценариев не регистрируются. Но как только я поместил код в эту единственную функцию, это все еще происходило.

Любые подсказки будут полезны.

Спасибо, Дж.


person Cronk    schedule 03.01.2014    source источник
comment
вы загружаете другую страницу в окно   -  person Arun P Johny    schedule 03.01.2014
comment
в любом случае этот метод не будет надежным, поскольку будет какая-то гарантия того, что первый вызов будет завершен до того, как будет отправлен второй... вы можете взглянуть на AJAX...   -  person Arun P Johny    schedule 03.01.2014
comment
если ваша страница находится в другом домене, вам, возможно, придется посмотреть CORS/JSONP   -  person Arun P Johny    schedule 03.01.2014
comment
Арун: К сожалению, некоторые «обычные» веб-технологии недоступны: PHP, AJAX и т. д. Эта настройка местоположения, вызывающая полуредирект, кажется нашим единственным выходом (по крайней мере, мы выяснили). Честно говоря, неважно, завершится ли первый вызов до того, как будет сделан второй, поскольку целевая система просто добавляет его в свой собственный стек, и он выполняется по порядку. Однако ОЧЕНЬ важно, чтобы были сделаны ОБА звонка. Я просто подумал, что странно, что только один был сделан.   -  person Cronk    schedule 03.01.2014


Ответы (1)


Изменение значения window.location зарезервировано исключительно для случаев, когда вы хотите вызвать перенаправление браузера.

Похоже, вы хотите вместо этого инициировать запрос страницы. Вы говорите, что у вас уже загружен jQuery, если это так, вы можете инициировать такой запрос, используя jQuery.get или аналогичная функция.

Например:

// Loads the myscript.php page in the background
$.get('myscript.php');

// You can also pass data (in the form of an object as the second argument)
$.get('myscript.php', { name: "John", time: "2pm" });
person Jacob Budin    schedule 03.01.2014
comment
Джейкоб: Да, мы используем перенаправление браузера, чтобы сервер запускал скрипт. Я посмотрю, сможем ли мы заставить это работать; мне запомнилось, что мы пробовали это в прошлом и сталкивались с технологическими проблемами. Это не совсем полноценная веб/интернет-среда со всеми доступными тонкостями. Это веб-просмотрщик внутри решения FileMaker DB. - person Cronk; 03.01.2014
comment
О, я должен уточнить, что, поскольку это веб-просмотрщик FileMaker, вызов URL-адреса на самом деле использует НЕ HTTP, а FMP в качестве протокола (таким образом, он отправляется на сервер FileMaker для обработки и, таким образом, вызывает скрипт). - person Cronk; 03.01.2014
comment
Да, когда я пытаюсь использовать $.get(), я получаю эту ошибку: Не удалось загрузить ресурс: неподдерживаемый URL. URL-адрес, который я использую, выглядит следующим образом: fmp://server.spot.com/... FMP зарегистрирован в моей системе, но похоже, что .get это не нравится. - person Cronk; 03.01.2014
comment
Похоже, что Window.Location не завершается/устанавливается/отправляется/что-то еще, пока не будет завершен ВЕСЬ стек вызовов JS. Итак, когда я нажимаю кнопку, в стек вызовов скриптов добавляются два скрипта, связанных с «обработчиком», прежде чем попасть в написанный мной JS-код, который, в свою очередь, добавляет в стек еще несколько вызовов функций. Именно в этой серии вызовов обновляется «window.location». Но эти вызовы на самом деле не запускают удаленную систему, пока я не пройду весь стек вызовов JS и не выйду из исходной функции. Есть ли способ принудительно оценить window.location? - person Cronk; 03.01.2014